aboutsummaryrefslogtreecommitdiffstats
path: root/src/song.c
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-10-04 21:01:17 -0700
committerEric Wong <normalperson@yhbt.net>2008-10-04 21:01:19 -0700
commit1533279fb18b2b0f53345f0e0727d2f0f968c00d (patch)
treef3f52d6360f884bceaa2715fcf95e6326a59ed56 /src/song.c
parent3e0c1bcf6237f42506cd0d74046e74a70fff0cb7 (diff)
parentb84bf082df6ec5a7223c86abb94d799569aed1c1 (diff)
downloadmpd-1533279fb18b2b0f53345f0e0727d2f0f968c00d.tar.gz
mpd-1533279fb18b2b0f53345f0e0727d2f0f968c00d.tar.xz
mpd-1533279fb18b2b0f53345f0e0727d2f0f968c00d.zip
Merge commit 'box/song-locks' into ew/song-locks
* commit 'box/song-locks-wip': directory: reuse existing directory if found on update song: better handling of existing songs when rereading DB tag: merge clearMpdTag into tag_free song: start avoiding race in updateSongInfo
Diffstat (limited to 'src/song.c')
-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);