Commit d44790b3 authored by Max Kellermann's avatar Max Kellermann

output/Thread: reduce locking further in Open()

parent f8164a3d
......@@ -146,9 +146,10 @@ AudioOutput::Open()
/* open the filter */
const ScopeUnlock unlock(mutex);
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]",
......@@ -162,8 +163,6 @@ AudioOutput::Open()
out_audio_format = filter_audio_format.WithMask(config_audio_format);
mutex.unlock();
const AudioFormat retry_audio_format = out_audio_format;
retry_without_dsd:
......@@ -174,13 +173,12 @@ AudioOutput::Open()
name, plugin.name);
CloseFilter();
mutex.lock();
const ScopeLock lock(mutex);
fail_timer.Update();
return;
}
mutex.lock();
assert(!open);
try {
......@@ -189,7 +187,6 @@ AudioOutput::Open()
FormatError(e, "Failed to convert for \"%s\" [%s]",
name, plugin.name);
mutex.unlock();
ao_plugin_close(this);
if (out_audio_format.format == SampleFormat::DSD) {
......@@ -213,14 +210,12 @@ AudioOutput::Open()
}
CloseFilter();
mutex.lock();
const ScopeLock lock(mutex);
fail_timer.Update();
return;
}
open = true;
FormatDebug(output_domain,
"opened plugin=%s name=\"%s\" audio_format=%s",
plugin.name, name,
......@@ -230,6 +225,9 @@ AudioOutput::Open()
FormatDebug(output_domain, "converting from %s",
audio_format_to_string(in_audio_format,
&af_string));
const ScopeLock lock(mutex);
open = true;
}
void
......
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