X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/80a1fe1a200a4309c36598571b1f4ccb76a8788f..3634a92de5281a6b19ca03b49b21dad853f386b3:/messages.cpp diff --git a/messages.cpp b/messages.cpp index fd19f6b..6c9f3ec 100644 --- a/messages.cpp +++ b/messages.cpp @@ -28,14 +28,30 @@ message::message(message_type t, double a, double c) std::string message::to_string() { - static const char* str[DATA_CLOSE + 1] = { "CTRL", "DATA", - "CTRL_CLOSE", "DATA_CLOSE" }; std::ostringstream oss; - oss << str[type] << ": " << amount; + switch (type) { + case CTRL: + oss << "CTRL: " << amount << " (info)"; + if (opt::bookkeeping) + oss << "; " << credit << " (credit)"; + break; + case DATA: + oss << "DATA: " << amount << " (load)"; + break; + case CTRL_CLOSE: + oss << "CTRL_CLOSE"; + break; + case DATA_CLOSE: + oss << "DATA_CLOSE"; + break; + default: + oss << "UNKNOWN MESSAGE TYPE: " << type; + break; + } return oss.str(); } -void message_queue::push(m_task_t task) +void message_queue::push(msg_task_t task) { if (queue.push(task)) { // list was empty, the push must be signaled @@ -45,37 +61,26 @@ void message_queue::push(m_task_t task) } } -bool message_queue::pop(message*& msg, m_host_t& from, double timeout) +bool message_queue::pop(message*& msg, msg_host_t& from, double timeout) { - m_task_t task; + msg_task_t task; 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); - } - TRY_CLEANUP { - mutex.release(); - } - CATCH (e) { - if (e.category != timeout_error) - RETHROW; - xbt_ex_free(e); - return false; // got a timeout + if (timeout > 0) { + if (!cond.timedwait(mutex, timeout)) + return false; + } else { + cond.wait(mutex); } bool pop_was_successful = queue.try_pop(task); xbt_assert(pop_was_successful); - } else { - mutex.release(); } + mutex.release(); } msg = static_cast(MSG_task_get_data(task)); from = MSG_task_get_source(task);