X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/4878eece18057b563452421a54979f7f11bad8fb..2955afe732becd712d718abaf6806aef3c0998a6:/messages.cpp?ds=sidebyside diff --git a/messages.cpp b/messages.cpp index 547a29f..70e2236 100644 --- a/messages.cpp +++ b/messages.cpp @@ -63,32 +63,29 @@ void message_queue::push(msg_task_t task) bool message_queue::pop(message*& msg, msg_host_t& from, double timeout) { - msg_task_t task; + msg_task_t task = nullptr; if (!queue.try_pop(task)) { if (timeout == 0.0) return false; mutex.acquire(); if (!queue.try_pop(task)) { - xbt_ex_t e; XBT_DEBUG("waiting for a message to come"); - TRY { - if (timeout > 0) - cond.timedwait(mutex, timeout); - else - cond.wait(mutex); - } - CATCH (e) { - if (e.category != timeout_error) - RETHROW; - xbt_ex_free(e); - return false; // got a timeout + bool hit_timeout; + if (timeout > 0) { + hit_timeout = !cond.timedwait(mutex, timeout); + } else { + cond.wait(mutex); + hit_timeout = false; } bool pop_was_successful = queue.try_pop(task); - xbt_assert(pop_was_successful); + xbt_assert(hit_timeout || pop_was_successful); } mutex.release(); } + if (task == nullptr) + return false; + msg = static_cast(MSG_task_get_data(task)); from = MSG_task_get_source(task); MSG_task_destroy(task);