]> AND Private Git Repository - loba.git/blobdiff - communicator.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Check if communications are successfull.
[loba.git] / communicator.cpp
index 1da6deffea6c2af314a36f0706f22fa1c82964f6..1bf16cda43b88e475a6d60b9161fb2bacb12ee59 100644 (file)
@@ -137,20 +137,12 @@ 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::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();
     }
 }
 
         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;
 int communicator::receiver_wrapper(int, char* [])
 {
     communicator* comm;
@@ -168,7 +160,7 @@ int communicator::receiver_wrapper(int, char* [])
 
 void communicator::receiver1(msg_comm_t& comm, m_task_t& task, const char* mbox)
 {
 
 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);
     if (strcmp(MSG_task_get_name(task), "finalize")) {
         XBT_DEBUG("received message on %s", mbox);
         xbt_mutex_acquire(receiver_mutex);
@@ -215,6 +207,21 @@ void communicator::receiver()
     xbt_dynar_free(&comms);
 }
 
     xbt_dynar_free(&comms);
 }
 
+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:
 // mode: c++
 // End:
 // Local variables:
 // mode: c++
 // End: