output/Internal: remember the most recent error
This commit is contained in:
parent
a9f2d25957
commit
ef9acc54ec
@ -29,6 +29,8 @@
|
||||
#include "thread/Thread.hxx"
|
||||
#include "system/PeriodClock.hxx"
|
||||
|
||||
#include <exception>
|
||||
|
||||
class PreparedFilter;
|
||||
class MusicPipe;
|
||||
class EventLoop;
|
||||
@ -255,6 +257,14 @@ struct AudioOutput {
|
||||
*/
|
||||
AudioOutputSource source;
|
||||
|
||||
/**
|
||||
* The error that occurred in the output thread. It is
|
||||
* cleared whenever the output is opened successfully.
|
||||
*
|
||||
* Protected by #mutex.
|
||||
*/
|
||||
std::exception_ptr last_error;
|
||||
|
||||
/**
|
||||
* Throws #std::runtime_error on error.
|
||||
*/
|
||||
|
@ -405,11 +405,14 @@ AudioOutput::Task()
|
||||
break;
|
||||
|
||||
case Command::ENABLE:
|
||||
last_error = nullptr;
|
||||
|
||||
try {
|
||||
Enable();
|
||||
} catch (const std::runtime_error &e) {
|
||||
LogError(e);
|
||||
fail_timer.Update();
|
||||
last_error = std::current_exception();
|
||||
}
|
||||
|
||||
CommandFinished();
|
||||
@ -421,11 +424,14 @@ AudioOutput::Task()
|
||||
break;
|
||||
|
||||
case Command::OPEN:
|
||||
last_error = nullptr;
|
||||
|
||||
try {
|
||||
Open();
|
||||
} catch (const std::runtime_error &e) {
|
||||
LogError(e);
|
||||
fail_timer.Update();
|
||||
last_error = std::current_exception();
|
||||
}
|
||||
|
||||
CommandFinished();
|
||||
|
Loading…
Reference in New Issue
Block a user