From 4c09aeb5a1ac7dbf80af680c18f4e36d4776dc8c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 7 Jan 2011 22:51:50 +0100 Subject: [PATCH] player_thread: fix assertion failure due to early seek Until the decoder plugin has called decoder_initialized(), the player may not submit seek commands. This however could occur with a slow decoder and a CUE file with a virtual song offset. This patch adds another check. --- NEWS | 1 + src/player_thread.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index f56f55647..be21282e2 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ ver 0.16.1 (2010/??/??) * output: - solaris: add missing parameter to open_cloexec() cal - osx: fix up audio format first, then apply it to device +* player_thread: fix assertion failure due to early seek ver 0.16 (2010/12/11) diff --git a/src/player_thread.c b/src/player_thread.c index cdcff3f92..776d6667f 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -869,6 +869,10 @@ static void do_play(struct decoder_control *dc) /* seek to the beginning of the range */ const struct song *song = decoder_current_song(dc); if (song != NULL && song->start_ms > 0 && + /* we must not send a seek command until + the decoder is initialized + completely */ + !player.decoder_starting && !dc_seek(dc, song->start_ms / 1000.0)) player_dc_stop(&player);