diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-08-17 15:44:58 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-08-17 15:44:58 +0200 |
| commit | 6abf2fdd53b14608561fcc1900507daea5b79fb7 (patch) | |
| tree | f35ecc5becacc3733c856d20051f58d681a2d454 /src/lib/butler.cc | |
| parent | fe44dba0f2ad2ad9fcdfcee11213794a7a6a01e0 (diff) | |
Report better errors when the butler dies.
Adapted from d23f55d8cd73adda823d0a2fcabc129b8845a81 in master.
Diffstat (limited to 'src/lib/butler.cc')
| -rw-r--r-- | src/lib/butler.cc | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/lib/butler.cc b/src/lib/butler.cc index df2358086..33938ece4 100644 --- a/src/lib/butler.cc +++ b/src/lib/butler.cc @@ -208,6 +208,12 @@ try boost::mutex::scoped_lock lm (_mutex); _finished = true; _arrived.notify_all (); +} catch (std::exception& e) { + store_current (); + boost::mutex::scoped_lock lm (_mutex); + _died = true; + _died_message = e.what (); + _arrived.notify_all (); } catch (...) { store_current (); boost::mutex::scoped_lock lm (_mutex); @@ -226,7 +232,7 @@ Butler::get_video (bool blocking, Error* e) if (_suspended || (_video.empty() && !blocking)) { if (e) { - *e = AGAIN; + e->code = Error::AGAIN; } return make_pair(shared_ptr<PlayerVideo>(), DCPTime()); } @@ -239,11 +245,12 @@ Butler::get_video (bool blocking, Error* e) if (_video.empty()) { if (e) { if (_died) { - *e = DIED; + e->code = Error::DIED; + e->message = _died_message; } else if (_finished) { - *e = FINISHED; + e->code = Error::FINISHED; } else { - *e = NONE; + e->code = Error::NONE; } } return make_pair(shared_ptr<PlayerVideo>(), DCPTime()); @@ -299,6 +306,13 @@ try LOG_TIMING("finish-prepare in %1", thread_id()); } } +catch (std::exception& e) +{ + store_current (); + boost::mutex::scoped_lock lm (_mutex); + _died = true; + _died_message = e.what (); +} catch (...) { store_current (); @@ -406,3 +420,22 @@ Butler::text (PlayerText pt, TextType type, optional<DCPTextTrack> track, DCPTim _closed_caption.put (pt, *track, period); } + +string +Butler::Error::summary () const +{ + switch (code) + { + case Error::NONE: + return "No error registered"; + case Error::AGAIN: + return "Butler not ready"; + case Error::DIED: + return String::compose("Butler died (%1)", message); + case Error::FINISHED: + return "Butler finished"; + } + + return ""; +} + |
