output/Control: avoid sending KILL twice

This commit is contained in:
Max Kellermann 2020-01-18 21:43:14 +01:00
parent cd612c4eef
commit 37f984ba74
3 changed files with 14 additions and 1 deletions

View File

@ -377,7 +377,9 @@ AudioOutputControl::BeginDestroy() noexcept
{
if (thread.IsDefined()) {
const std::lock_guard<Mutex> protect(mutex);
if (IsCommandFinished())
if (!killed) {
killed = true;
CommandAsync(Command::KILL);
}
}
}

View File

@ -212,6 +212,15 @@ class AudioOutputControl {
*/
bool skip_delay;
/**
* Has Command::KILL already been sent? This field is only
* defined if `thread` is defined. It shall avoid sending the
* command twice.
*
* Protected by #mutex.
*/
bool killed;
public:
/**
* This mutex protects #open, #fail_timer, #pipe.

View File

@ -526,6 +526,8 @@ AudioOutputControl::StartThread()
{
assert(command == Command::NONE);
killed = false;
const ScopeUnlock unlock(mutex);
thread.Start();
}