output/Internal: remove mutex code from BeginPause(), IteratePause()

This commit is contained in:
Max Kellermann 2017-08-07 17:40:40 +02:00
parent 8f42ba13ef
commit 15dcaeda0f
2 changed files with 17 additions and 5 deletions

View File

@ -120,7 +120,6 @@ AudioOutput::Close(bool drain) noexcept
void
AudioOutput::BeginPause() noexcept
{
const ScopeUnlock unlock(mutex);
ao_plugin_cancel(*this);
}
@ -128,7 +127,6 @@ bool
AudioOutput::IteratePause() noexcept
{
try {
const ScopeUnlock unlock(mutex);
return ao_plugin_pause(*this);
} catch (const std::runtime_error &e) {
FormatError(e, "\"%s\" [%s] failed to pause",

View File

@ -343,7 +343,11 @@ AudioOutputControl::InternalPlay() noexcept
inline void
AudioOutputControl::InternalPause() noexcept
{
output->BeginPause();
{
const ScopeUnlock unlock(mutex);
output->BeginPause();
}
pause = true;
CommandFinished();
@ -352,14 +356,24 @@ AudioOutputControl::InternalPause() noexcept
if (!WaitForDelay())
break;
if (!output->IteratePause()) {
bool success;
{
const ScopeUnlock unlock(mutex);
success = output->IteratePause();
}
if (!success) {
InternalClose(false);
break;
}
} while (command == Command::NONE);
pause = false;
output->EndPause();
{
const ScopeUnlock unlock(mutex);
output->EndPause();
}
skip_delay = true;
}