From e46bbc95eae9bc75e6d809cdf157637b682765c2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 4 Oct 2008 02:44:21 -0700 Subject: song: better handling of existing songs when rereading DB Don't reallocate existing tags if they haven't changed. This isn't used as often anymore, but we still take HUP signals to reread the DB if other processes changed it. --- src/song.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/song.c b/src/song.c index dc100899a..4f7b2f8bb 100644 --- a/src/song.c +++ b/src/song.c @@ -123,11 +123,20 @@ static void insertSongIntoList(struct songvec *sv, Song *newsong) tag_end_add(newsong->tag); } else { /* prevent dupes, just update the existing song info */ if (existing->mtime != newsong->mtime) { - tag_free(existing->tag); - if (newsong->tag) - tag_end_add(newsong->tag); - existing->tag = newsong->tag; existing->mtime = newsong->mtime; + if (tag_equal(existing->tag, newsong->tag)) { + if (newsong->tag) + tag_free(newsong->tag); + } else { + struct mpd_tag *old_tag = existing->tag; + + if (newsong->tag) + tag_end_add(newsong->tag); + existing->tag = newsong->tag; + if (old_tag) + tag_free(old_tag); + } + /* prevent tag_free in freeJustSong */ newsong->tag = NULL; } freeJustSong(newsong); -- cgit v1.2.3