Commit a5b8d791 authored by Max Kellermann's avatar Max Kellermann

player/Thread: mutex must be locked inside OpenOutput()

parent d0e735ee
......@@ -297,6 +297,8 @@ private:
* Wrapper for MultipleOutputs::Open(). Upon failure, it
* pauses the player.
*
* Caller must lock the mutex.
*
* @return true on success
*/
bool OpenOutput();
......@@ -457,6 +459,7 @@ Player::OpenOutput()
pc.state == PlayerState::PAUSE);
try {
const ScopeUnlock unlock(pc.mutex);
pc.outputs.Open(play_audio_format, buffer);
} catch (const std::runtime_error &e) {
LogError(e);
......@@ -467,7 +470,7 @@ Player::OpenOutput()
audio output becomes available */
paused = true;
pc.LockSetOutputError(std::current_exception());
pc.SetOutputError(std::current_exception());
idle_add(IDLE_PLAYER);
......@@ -477,10 +480,7 @@ Player::OpenOutput()
output_open = true;
paused = false;
{
const ScopeLock lock(pc.mutex);
pc.state = PlayerState::PLAY;
}
pc.state = PlayerState::PLAY;
idle_add(IDLE_PLAYER);
......@@ -510,8 +510,6 @@ Player::CheckDecoderStartup()
play_audio_format = dc.out_audio_format;
decoder_starting = false;
const ScopeUnlock unlock(pc.mutex);
idle_add(IDLE_PLAYER);
if (!paused && !OpenOutput()) {
......@@ -698,9 +696,9 @@ Player::ProcessCommand()
pc.state = PlayerState::PLAY;
} else {
OpenOutput();
pc.Lock();
OpenOutput();
}
pc.CommandFinished();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment