From a6bb27483b30f81145c19d1048a342c0aa5401d0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 7 Sep 2014 21:31:10 +0200 Subject: DecoderThread: clear the pipe when handling late SEEK See code comment. Fixes assertion failure in decoder_command_finished(). --- src/DecoderThread.cxx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/DecoderThread.cxx b/src/DecoderThread.cxx index 72fc3cfb4..cf21534f0 100644 --- a/src/DecoderThread.cxx +++ b/src/DecoderThread.cxx @@ -26,6 +26,7 @@ #include "Song.hxx" #include "system/FatalError.hxx" #include "Mapper.hxx" +#include "MusicPipe.hxx" #include "fs/Traits.hxx" #include "fs/AllocatedPath.hxx" #include "DecoderAPI.hxx" @@ -418,9 +419,18 @@ decoder_task(void *arg) dc.replay_gain_prev_db = dc.replay_gain_db; dc.replay_gain_db = 0; - /* fall through */ + decoder_run(dc); + break; case DecoderCommand::SEEK: + /* this seek was too late, and the decoder had + already finished; start a new decoder */ + + /* we need to clear the pipe here; usually the + PlayerThread is responsible, but it is not + aware that the decoder has finished */ + dc.pipe->Clear(*dc.buffer); + decoder_run(dc); break; -- cgit v1.2.3