output/alsa: reset "active" on error

Use the "active" flag in PrepareSockets() instead of LockHasError().
This commit is contained in:
Max Kellermann 2018-04-26 16:14:27 +02:00
parent 485ed0b156
commit 8a809013f3
1 changed files with 6 additions and 11 deletions

View File

@ -305,14 +305,10 @@ private:
return frames_written;
}
bool LockHasError() const noexcept {
const std::lock_guard<Mutex> lock(mutex);
return !!error;
}
void LockCaughtError() noexcept {
const std::lock_guard<Mutex> lock(mutex);
error = std::current_exception();
active = false;
cond.signal();
}
@ -766,12 +762,11 @@ AlsaOutput::Drain()
Activate();
while (drain) {
if (error)
std::rethrow_exception(error);
while (drain && active)
cond.wait(mutex);
}
if (error)
std::rethrow_exception(error);
}
inline void
@ -866,7 +861,7 @@ AlsaOutput::Play(const void *chunk, size_t size)
std::chrono::steady_clock::duration
AlsaOutput::PrepareSockets() noexcept
{
if (LockHasError()) {
if (!LockIsActive()) {
ClearSocketList();
return std::chrono::steady_clock::duration(-1);
}