Commit 6425b4f9 authored by Max Kellermann's avatar Max Kellermann

output/MultipleOutputs: parallelize AudioOutput destruction

Reduce latency by stopping all AudioOutputs asynchronously.
parent fb907f5f
......@@ -283,7 +283,8 @@ public:
void StartThread();
void StopThread();
void Finish();
void BeginDestroy();
void FinishDestroy();
bool IsOpen() const {
return open;
......
......@@ -43,8 +43,11 @@ MultipleOutputs::MultipleOutputs(MixerListener &_mixer_listener)
MultipleOutputs::~MultipleOutputs()
{
/* parallel destruction */
for (auto i : outputs)
i->Finish();
i->BeginDestroy();
for (auto i : outputs)
i->FinishDestroy();
}
static AudioOutput *
......
......@@ -274,13 +274,22 @@ AudioOutput::StopThread()
}
void
AudioOutput::Finish()
AudioOutput::BeginDestroy()
{
if (mixer != nullptr)
mixer_auto_close(mixer);
if (thread.IsDefined()) {
const ScopeLock protect(mutex);
CommandAsync(Command::KILL);
}
}
void
AudioOutput::FinishDestroy()
{
if (thread.IsDefined())
StopThread();
thread.Join();
audio_output_free(this);
}
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