Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bugfix to dirty cleanup of SIMIX from SMPI.
[simgrid.git] / src / smpi / smpi_base.c
index 40b1b58..f64a3d9 100644 (file)
@@ -23,6 +23,7 @@ void smpi_process_init(int* argc, char*** argv) {
   data = smpi_process_remote_data(index);
   SIMIX_process_set_data(proc, data);
   if (*argc > 2) {
+    free((*argv)[1]);
     memmove(&(*argv)[1], &(*argv)[2], sizeof(char *) * (*argc - 2));
     (*argv)[(*argc) - 1] = NULL;
   }
@@ -162,6 +163,8 @@ void smpi_mpi_wait(MPI_Request* request, MPI_Status* status) {
   // data is null if receiver waits before sender enters the rdv
   if(data == MPI_REQUEST_NULL || data->complete == 0) {
     SIMIX_network_wait((*request)->pair, -1.0);
+  } else {
+    SIMIX_communication_destroy((*request)->pair);
   }
   finish_wait(request, status);
 }
@@ -180,6 +183,7 @@ int smpi_mpi_waitany(int count, MPI_Request requests[], MPI_Status* status) {
         data = (MPI_Request)SIMIX_communication_get_data(requests[i]->pair);
         if(data != MPI_REQUEST_NULL && data->complete == 1) {
           index = i;
+          SIMIX_communication_destroy(requests[index]->pair); // always succeeds (but cleans the simix layer)
           break;
         }
       }