From cab77e35e08af825bec745b8a3af93b9feff266b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 5 Jan 2018 13:00:24 +0100 Subject: [PATCH] queue/PlaylistControl: fix crash after seek failure This completes the bug fix commit 2065e3290452377b2931f3129b230c8cc536cbc8; if we clear "queued" then we must clear "queued_song" as well, or another variant of the assertion fails. --- NEWS | 1 + src/queue/PlaylistControl.cxx | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index e87043daa..308aa0551 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,5 @@ ver 0.20.15 (not yet released) +* queue: fix crash after seek failure * resampler - soxr: clear internal state after manual song change * state file diff --git a/src/queue/PlaylistControl.cxx b/src/queue/PlaylistControl.cxx index 018ddcbb7..c71f29ba2 100644 --- a/src/queue/PlaylistControl.cxx +++ b/src/queue/PlaylistControl.cxx @@ -212,8 +212,6 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) { assert(queue.IsValidOrder(i)); - const DetachedSong *queued_song = GetQueuedSong(); - pc.LockClearError(); stop_on_error = true; error_count = 0; @@ -226,8 +224,6 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) playing = true; current = i; - - queued_song = nullptr; } queued = -1; @@ -235,7 +231,7 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) try { pc.LockSeek(new DetachedSong(queue.GetOrder(i)), seek_time); } catch (...) { - UpdateQueuedSong(pc, queued_song); + UpdateQueuedSong(pc, nullptr); throw; }