diff --git a/src/output/Internal.hxx b/src/output/Internal.hxx index 89a86c2c4..f4571b30f 100644 --- a/src/output/Internal.hxx +++ b/src/output/Internal.hxx @@ -413,6 +413,8 @@ private: /** * Throws std::runtime_error on error. + * + * Mutex must not be locked. */ AudioFormat OpenFilter(AudioFormat &format); diff --git a/src/output/OutputThread.cxx b/src/output/OutputThread.cxx index 27a09f6c0..25676f239 100644 --- a/src/output/OutputThread.cxx +++ b/src/output/OutputThread.cxx @@ -148,6 +148,7 @@ AudioOutput::Open() AudioFormat filter_audio_format; try { + const ScopeUnlock unlock(mutex); filter_audio_format = OpenFilter(in_audio_format); } catch (const std::runtime_error &e) { FormatError(e, "Failed to open filter for \"%s\" [%s]", @@ -263,10 +264,9 @@ AudioOutput::CloseOutput(bool drain) void AudioOutput::ReopenFilter() { - { - const ScopeUnlock unlock(mutex); - CloseFilter(); - } + const ScopeUnlock unlock(mutex); + + CloseFilter(); try { OpenFilter(in_audio_format); @@ -276,6 +276,7 @@ AudioOutput::ReopenFilter() "Failed to open filter for \"%s\" [%s]", name, plugin.name); + const ScopeLock lock(mutex); Close(false); } }