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

Private GIT Repository
Bug fixed: use a timeout on receive.
[loba.git] / simple_async.cpp
index 2ad0cbc3146a101a24205c6454d9a24c2ad19b06..8e04ba94ce9774a3d90a29e403e9175c448f851c 100644 (file)
@@ -3,6 +3,7 @@
 #include <time.h>               // clock()
 #include <msg/msg.h>
 #include <xbt/log.h>
 #include <time.h>               // clock()
 #include <msg/msg.h>
 #include <xbt/log.h>
+#include "simgrid_features.h"
 
 // Creates a new log category and makes it the default
 XBT_LOG_NEW_DEFAULT_CATEGORY(simu, "Simulation messages");
 
 // Creates a new log category and makes it the default
 XBT_LOG_NEW_DEFAULT_CATEGORY(simu, "Simulation messages");
@@ -19,11 +20,11 @@ enum {
     EXIT_FAILURE_CLEAN = 0x08,  // error at cleanup
 };
 
     EXIT_FAILURE_CLEAN = 0x08,  // error at cleanup
 };
 
-int sender(int, char *[])
+int sender(int, char[])
 {
     char mbox_stack[N_MBOX][100];
     msg_comm_t comm_stack[N_MBOX * N_MESG];
 {
     char mbox_stack[N_MBOX][100];
     msg_comm_t comm_stack[N_MBOX * N_MESG];
-    msg_comm_t *comm = comm_stack;
+    msg_comm_t* pcomm = comm_stack;
     for (int i = 0 ; i < N_MBOX ; i++)
         sprintf(mbox_stack[i], "MBox_%02d", i);
 
     for (int i = 0 ; i < N_MBOX ; i++)
         sprintf(mbox_stack[i], "MBox_%02d", i);
 
@@ -32,7 +33,7 @@ int sender(int, char *[])
     for (int i = 0 ; i < N_MBOX ; i++)
         for (int j = 0 ; j < N_MESG ; j++) {
             char task_name[100];
     for (int i = 0 ; i < N_MBOX ; i++)
         for (int j = 0 ; j < N_MESG ; j++) {
             char task_name[100];
-            const char *mailbox = mbox_stack[i];
+            const charmailbox = mbox_stack[i];
             unsigned shift = j;
             unsigned comm_size = 1 << shift;
             m_task_t task;
             unsigned shift = j;
             unsigned comm_size = 1 << shift;
             m_task_t task;
@@ -42,18 +43,22 @@ int sender(int, char *[])
             INFO4("At %02d, send %s, size %.0f to \"%s\"", n,
                   MSG_task_get_name(task),
                   MSG_task_get_data_size(task), mailbox);
             INFO4("At %02d, send %s, size %.0f to \"%s\"", n,
                   MSG_task_get_name(task),
                   MSG_task_get_data_size(task), mailbox);
-            *comm++ = MSG_task_isend(task, mailbox);
+            *pcomm++ = MSG_task_isend(task, mailbox);
             ++n;
         }
 
     INFO0("Wait for communications to terminate...");
             ++n;
         }
 
     INFO0("Wait for communications to terminate...");
-    MSG_comm_waitall(comm_stack, comm - comm_stack, -1.0);
+    MSG_comm_waitall(comm_stack, pcomm - comm_stack, -1.0);
+    if (!MSG_WAIT_DESTROYS_COMMS) {
+        while (pcomm > comm_stack)
+            MSG_comm_destroy(*--pcomm);
+    }
 
     INFO0("Finished.");
     return 0;
 }
 
 
     INFO0("Finished.");
     return 0;
 }
 
-int receiver(int, char *[])
+int receiver(int, char[])
 {
     char mbox[N_MBOX][100];
     int comm_count[N_MBOX];
 {
     char mbox[N_MBOX][100];
     int comm_count[N_MBOX];
@@ -77,7 +82,7 @@ int receiver(int, char *[])
         }
     }
     int n = 0;
         }
     }
     int n = 0;
-    while (xbt_dynar_length(dcomms)) {
+    while (!xbt_dynar_is_empty(dcomms)) {
         MSG_comm_waitany(dcomms);
         xbt_dynar_reset(dcomms);
         for (int i = 0 ; i < N_MBOX ; i++) {
         MSG_comm_waitany(dcomms);
         xbt_dynar_reset(dcomms);
         for (int i = 0 ; i < N_MBOX ; i++) {
@@ -111,10 +116,10 @@ int receiver(int, char *[])
     return 0;
 }
 
     return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
 {
-    const char *platform_file;
-    const char *application_file;
+    const charplatform_file;
+    const charapplication_file;
     // Note: variables used after THROW must be declared as volatile.
     volatile int exit_status;   // global exit status
     volatile double simulated_time = -1.0;
     // Note: variables used after THROW must be declared as volatile.
     volatile int exit_status;   // global exit status
     volatile double simulated_time = -1.0;