Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Persistent comms may be reused after a wait, do not put their handle to MPI_REQUEST_NULL
[simgrid.git] / src / smpi / smpi_base.c
index 1887ec0..eb2103e 100644 (file)
@@ -370,7 +370,7 @@ void smpi_mpi_start(MPI_Request request)
       request->refcount++;
       if(request->old_type->has_subtype == 0){
         oldbuf = request->buf;
-        if (oldbuf && request->size!=0){
+        if (!_xbt_replay_is_active() && oldbuf && request->size!=0){
           request->buf = xbt_malloc(request->size);
           memcpy(request->buf,oldbuf,request->size);
         }
@@ -771,7 +771,8 @@ void smpi_mpi_wait(MPI_Request * request, MPI_Status * status)
   }
 
   finish_wait(request, status);
-  *request = MPI_REQUEST_NULL;
+  if (*request != MPI_REQUEST_NULL && !((*request)->flags & PERSISTENT))
+      *request = MPI_REQUEST_NULL;
   // FIXME for a detached send, finish_wait is not called:
 }