decoder/Control: caller must lock mutex for Seek()

This commit is contained in:
Max Kellermann
2017-12-22 00:37:25 +01:00
parent e45d13d469
commit d0194a6fb3
3 changed files with 3 additions and 2 deletions

View File

@@ -128,8 +128,6 @@ DecoderControl::Stop() noexcept
void void
DecoderControl::Seek(SongTime t) DecoderControl::Seek(SongTime t)
{ {
const std::lock_guard<Mutex> protect(mutex);
assert(state != DecoderState::START); assert(state != DecoderState::START);
assert(state != DecoderState::ERROR); assert(state != DecoderState::ERROR);

View File

@@ -387,6 +387,8 @@ public:
/** /**
* Throws #std::runtime_error on error. * Throws #std::runtime_error on error.
*
* Caller must lock the object.
*/ */
void Seek(SongTime t); void Seek(SongTime t);

View File

@@ -628,6 +628,7 @@ Player::SeekDecoder() noexcept
try { try {
const PlayerControl::ScopeOccupied occupied(pc); const PlayerControl::ScopeOccupied occupied(pc);
const std::lock_guard<Mutex> lock(pc.mutex);
dc.Seek(where + start_time); dc.Seek(where + start_time);
} catch (...) { } catch (...) {
/* decoder failure */ /* decoder failure */