aboutsummaryrefslogtreecommitdiffstats
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-rw-r--r--src/playlist.c2
1 files changed, 1 insertions, 1 deletions
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);