X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/b238ee6ba620f3b271cc16cc25a6838f42bdf537..4ed2ded99f037e413c9008a324c85f8f95611bb5:/communicator.cpp?ds=inline diff --git a/communicator.cpp b/communicator.cpp index 45e43a3..1bf16cd 100644 --- a/communicator.cpp +++ b/communicator.cpp @@ -137,25 +137,17 @@ void communicator::flush(bool wait) std::copy(sent_comm.begin(), sent_comm.end(), comms); MSG_comm_waitall(comms, sent_comm.size(), -1.0); if (!MSG_WAIT_DESTROYS_COMMS) - std::for_each(sent_comm.begin(), sent_comm.end(), MSG_comm_destroy); + std::for_each(sent_comm.begin(), sent_comm.end(), + comm_check_n_destroy); sent_comm.clear(); } } -bool communicator::comm_test_n_destroy(msg_comm_t comm) -{ - if (MSG_comm_test(comm)) { - MSG_comm_destroy(comm); - return true; - } else - return false; -} - int communicator::receiver_wrapper(int, char* []) { communicator* comm; comm = static_cast(MSG_process_get_data(MSG_process_self())); - int result = comm->receiver(); + comm->receiver(); XBT_DEBUG("terminate"); xbt_mutex_acquire(comm->receiver_mutex); @@ -163,12 +155,12 @@ int communicator::receiver_wrapper(int, char* []) xbt_cond_signal(comm->receiver_cond); xbt_mutex_release(comm->receiver_mutex); - return result; + return 0; } void communicator::receiver1(msg_comm_t& comm, m_task_t& task, const char* mbox) { - MSG_comm_destroy(comm); + comm_check_n_destroy(comm); if (strcmp(MSG_task_get_name(task), "finalize")) { XBT_DEBUG("received message on %s", mbox); xbt_mutex_acquire(receiver_mutex); @@ -185,7 +177,7 @@ void communicator::receiver1(msg_comm_t& comm, m_task_t& task, const char* mbox) } } -int communicator::receiver() +void communicator::receiver() { ctrl_comm = MSG_task_irecv(&ctrl_task, get_ctrl_mbox()); data_comm = MSG_task_irecv(&data_task, get_data_mbox()); @@ -209,13 +201,25 @@ int communicator::receiver() receiver1(ctrl_comm, ctrl_task, get_ctrl_mbox()); else if (finished_comm == data_comm) receiver1(data_comm, data_task, get_data_mbox()); - else { - XBT_ERROR("Handling unknown comm -- %p", finished_comm); - MSG_comm_destroy(finished_comm); - } + else + THROW1(0, 0, "Cannot handle unknown comm -- %p", finished_comm); } xbt_dynar_free(&comms); - return 0; +} + +void communicator::comm_check_n_destroy(msg_comm_t comm) +{ + xbt_assert(MSG_comm_get_status(comm) == MSG_OK); + MSG_comm_destroy(comm); +} + +bool communicator::comm_test_n_destroy(msg_comm_t comm) +{ + if (MSG_comm_test(comm)) { + comm_check_n_destroy(comm); + return true; + } else + return false; } // Local variables: