From 30cad0c5f1db1363dd2225598e2e2b4237cf537b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Nov 2015 00:34:42 +0100 Subject: player/Thread: move code to WaitDecoderStartup() --- src/player/Thread.cxx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src/player') diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx index 3c315ebcf..7a9715f1b 100644 --- a/src/player/Thread.cxx +++ b/src/player/Thread.cxx @@ -202,6 +202,25 @@ private: */ bool CheckDecoderStartup(); + /** + * Call CheckDecoderStartup() repeatedly until the decoder has + * finished startup. Returns false on decoder error (and + * finishes the #PlayerCommand). + * + * This method does not check for commands. It is only + * allowed to be used while a command is being handled. + */ + bool WaitDecoderStartup() { + while (decoder_starting) { + if (!CheckDecoderStartup()) { + pc.LockCommandFinished(); + return false; + } + } + + return true; + } + /** * Stop the decoder and clears (and frees) its music pipe. * @@ -570,13 +589,8 @@ Player::SeekDecoder() /* wait for the decoder to complete initialization */ - while (decoder_starting) { - if (!CheckDecoderStartup()) { - /* decoder failure */ - pc.LockCommandFinished(); - return false; - } - } + if (!WaitDecoderStartup()) + return false; /* send the SEEK command */ -- cgit v1.2.3