aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/player/Thread.cxx39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx
index 7a9715f1b..9a5732ada 100644
--- a/src/player/Thread.cxx
+++ b/src/player/Thread.cxx
@@ -575,6 +575,9 @@ Player::SeekDecoder()
/* re-start the decoder */
StartDecoder(*pipe);
ActivateDecoder();
+
+ if (!WaitDecoderStartup())
+ return false;
} else {
if (!IsDecoderAtCurrentSong()) {
/* the decoder is already decoding the "next" song,
@@ -585,29 +588,31 @@ Player::SeekDecoder()
delete pc.next_song;
pc.next_song = nullptr;
queued = false;
- }
- /* wait for the decoder to complete initialization */
+ /* wait for the decoder to complete initialization
+ (just in case that happens to be still in
+ progress) */
- if (!WaitDecoderStartup())
- return false;
+ if (!WaitDecoderStartup())
+ return false;
- /* send the SEEK command */
+ /* send the SEEK command */
- SongTime where = pc.seek_time;
- if (!pc.total_time.IsNegative()) {
- const SongTime total_time(pc.total_time);
- if (where > total_time)
- where = total_time;
- }
+ SongTime where = pc.seek_time;
+ if (!pc.total_time.IsNegative()) {
+ const SongTime total_time(pc.total_time);
+ if (where > total_time)
+ where = total_time;
+ }
- if (!dc.Seek(where + start_time)) {
- /* decoder failure */
- pc.LockCommandFinished();
- return false;
- }
+ if (!dc.Seek(where + start_time)) {
+ /* decoder failure */
+ pc.LockCommandFinished();
+ return false;
+ }
- elapsed_time = where;
+ elapsed_time = where;
+ }
pc.LockCommandFinished();