Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't read a comm after completion since it is auto-destroyed now.
[simgrid.git] / src / smpi / smpi_base.c
index 16eaeb9..bd20848 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "private.h"
 #include "xbt/time.h"
+#include "mc/mc.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_base, smpi,
                                 "Logging specific to SMPI (base)");
@@ -98,7 +99,7 @@ void smpi_mpi_start(MPI_Request request)
     print_request("New send", request);
     mailbox = smpi_process_remote_mailbox(request->dst);
     request->action = SIMIX_req_comm_isend(mailbox, request->size, -1.0,
-                                           request->buf, request->size, &match_send, request);
+                                           request->buf, request->size, &match_send, request, 0);
 #ifdef HAVE_TRACING
     SIMIX_req_set_category (request->action, TRACE_internal_smpi_get_category());
 #endif
@@ -211,9 +212,8 @@ static void finish_wait(MPI_Request * request, MPI_Status * status)
     status->MPI_SOURCE = req->src;
     status->MPI_TAG = req->tag;
     status->MPI_ERROR = MPI_SUCCESS;
-    status->count = SIMIX_req_comm_get_dst_buff_size(req->action);
+    status->count = req->size;
   }
-  SIMIX_req_comm_destroy(req->action);
   print_request("Finishing", req);
   if(req->flags & NON_PERSISTENT) {
     smpi_mpi_request_free(request);
@@ -313,16 +313,19 @@ void smpi_mpi_waitall(int count, MPI_Request requests[],
   MPI_Status stat;
   MPI_Status *pstat = status == MPI_STATUS_IGNORE ? MPI_STATUS_IGNORE : &stat;
 
-  c = count;
-  while(c > 0) {
-    index = smpi_mpi_waitany(count, requests, pstat);
-    if(index == MPI_UNDEFINED) {
-      break;
+  for(c = 0; c < count; c++) {
+    if(MC_IS_ENABLED) {
+      smpi_mpi_wait(&requests[c], pstat);
+      index = c;
+    } else {
+      index = smpi_mpi_waitany(count, requests, pstat);
+      if(index == MPI_UNDEFINED) {
+        break;
+      }
     }
     if(status != MPI_STATUS_IGNORE) {
-      memcpy(&status[index], pstat, sizeof *pstat);
+      memcpy(&status[index], pstat, sizeof(*pstat));
     }
-    c--;
   }
 }