Commit ef9acc54 authored by Max Kellermann's avatar Max Kellermann

output/Internal: remember the most recent error

parent a9f2d259
......@@ -29,6 +29,8 @@
#include "thread/Thread.hxx"
#include "system/PeriodClock.hxx"
#include <exception>
class PreparedFilter;
class MusicPipe;
class EventLoop;
......@@ -256,6 +258,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.
*/
AudioOutput(const AudioOutputPlugin &_plugin,
......
......@@ -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();
......
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