diff --git a/Adapter.cc b/Adapter.cc index 6f1df95..aa5bdb3 100644 --- a/Adapter.cc +++ b/Adapter.cc @@ -147,7 +147,13 @@ namespace pEp { bool in_shutdown() { - SYNC_EVENT ev = q.back(); + SYNC_EVENT ev; + try { + ev = q.back(); + } + catch (std::underflow_error&) { + return false; + } if (ev) return false; else diff --git a/locked_queue.hh b/locked_queue.hh index b390799..e96faac 100644 --- a/locked_queue.hh +++ b/locked_queue.hh @@ -38,17 +38,21 @@ namespace utility _q.clear(); } - // undefined behavior when queue empty + // defined behavior when queue empty T back() { Lock lg(_mtx); + if (_q.empty()) + throw std::underflow_error("queue empty"); return _q.back(); } - // undefined behavior when queue empty + // defined behavior when queue empty T front() { Lock lg(_mtx); + if (_q.empty()) + throw std::underflow_error("queue empty"); return _q.front(); }