From e658bbaf0eeb92701a1f5039ebf93a86444cbe21 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Mon, 13 Jul 2020 21:51:47 +0200 Subject: [PATCH] back() and front() have defined behaviour now when queue is empty --- Adapter.cc | 8 +++++++- locked_queue.hh | 8 ++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) 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(); }