X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/3634a92de5281a6b19ca03b49b21dad853f386b3..24e97d18003e65787648061db7c23f0882f98d1a:/messages.cpp?ds=inline diff --git a/messages.cpp b/messages.cpp index 6c9f3ec..e20c4ca 100644 --- a/messages.cpp +++ b/messages.cpp @@ -14,10 +14,10 @@ message::message(message_type t, double a, double c) // compute message size // arbitrary: 8 for type, and 8 for each double switch (type) { - case CTRL: + case message_type::CTRL: size = opt::bookkeeping ? 24 : 16; // type + amount + (credit)? break; - case DATA: + case message_type::DATA: size = 16 + opt::comm_cost(amount); // type + amount + data size break; default: @@ -30,22 +30,22 @@ std::string message::to_string() { std::ostringstream oss; switch (type) { - case CTRL: + case message_type::CTRL: oss << "CTRL: " << amount << " (info)"; if (opt::bookkeeping) oss << "; " << credit << " (credit)"; break; - case DATA: + case message_type::DATA: oss << "DATA: " << amount << " (load)"; break; - case CTRL_CLOSE: + case message_type::CTRL_CLOSE: oss << "CTRL_CLOSE"; break; - case DATA_CLOSE: + case message_type::DATA_CLOSE: oss << "DATA_CLOSE"; break; default: - oss << "UNKNOWN MESSAGE TYPE: " << type; + oss << "UNKNOWN MESSAGE TYPE: " << static_cast(type); break; } return oss.str(); @@ -63,7 +63,7 @@ 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; @@ -71,17 +71,21 @@ bool message_queue::pop(message*& msg, msg_host_t& from, double timeout) mutex.acquire(); if (!queue.try_pop(task)) { XBT_DEBUG("waiting for a message to come"); + bool hit_timeout; if (timeout > 0) { - if (!cond.timedwait(mutex, timeout)) - return false; + 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);