From 799d1c9dc20c2a6723442614e10808bc5902c9df Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 10 Feb 2009 08:18:01 +0100 Subject: player_thread: reset pc.next_song only if queued When we reset pc.next_song if there is no song queued, this might cause a race condition: the next song to be played is cleared, while pc.command was already set. Clear the "next_song" only if there is a song queued for the current do_play() invocation. --- src/player_thread.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/player_thread.c b/src/player_thread.c index 352ceabae..f6069b048 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -92,7 +92,6 @@ static void player_stop_decoder(void) { dc_stop(&pc.notify); pc.state = PLAYER_STATE_STOP; - pc.next_song = NULL; event_pipe_emit(PIPE_EVENT_PLAYLIST); } @@ -511,6 +510,11 @@ static void do_play(void) } } + if (player.queued) { + assert(pc.next_song != NULL); + pc.next_song = NULL; + } + player_stop_decoder(); } -- cgit v1.2.3