aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-01-14 11:41:22 +0100
committerMax Kellermann <max@duempel.org>2009-01-14 11:42:45 +0100
commit2c540ee8a461d6f394baf5046a64341aa1655c18 (patch)
tree81f7c0af1d99efdf41069775cdee8099e5d5038b
parent2af1742fcf99e32129c55334a08fba22f28dcbc7 (diff)
downloadmpd-2c540ee8a461d6f394baf5046a64341aa1655c18.tar.gz
mpd-2c540ee8a461d6f394baf5046a64341aa1655c18.tar.xz
mpd-2c540ee8a461d6f394baf5046a64341aa1655c18.zip
playlist: safely search the playlist for deleted song
When a song file is deleted during database update, all pointers to it must be removed from the playlist. The "for" loop in deleteASongFromPlaylist() did not deal with multiple copies of the deleted song properly, and left instances of the (to-be-invalidated) pointer in. Fix this by reversing the loop.
-rw-r--r--NEWS7
-rw-r--r--src/playlist.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 5fc022fb7..0d9bdcfee 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,13 @@ ver 0.15 - (200?/??/??)
* fix cross-fading bug: it used to play some chunks of the new song twice
* --create-db starts the MPD daemon instead of exiting
* input_curl: honour http_proxy_* config directives
+* playlist
+ - fix assertion failure during playlist load
+ - implement Fisher-Yates shuffle properly
+ - safely search the playlist for deleted song
+* use custom PRNG for volume dithering (speedup)
+* detect libid3tag without pkg-config
+
ver 0.14 (2008/12/25)
* audio outputs:
diff --git a/src/playlist.c b/src/playlist.c
index e680af1e6..bc01700aa 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -764,7 +764,7 @@ deleteASongFromPlaylist(const struct song *song)
if (NULL == playlist.songs)
return;
- for (unsigned i = 0; i < playlist.length; i++)
+ for (int i = playlist.length - 1; i >= 0; --i)
if (song == playlist.songs[i])
deleteFromPlaylist(i);