aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/song.c17
1 files 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);