Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI] Fix wrong return value in MPI_Testany.
[simgrid.git] / src / smpi / smpi_base.cpp
index 54ef209..ccc85cd 100644 (file)
@@ -74,7 +74,7 @@ static int match_send(void* a, void* b,smx_synchro_t ignored) {
 typedef struct s_smpi_factor_multival *smpi_os_factor_multival_t;
 typedef struct s_smpi_factor_multival { // FIXME: this should be merged (deduplicated) with s_smpi_factor defined in network_smpi.c
   long factor=0;
-  std::vector<double> values; /** We allocate arbitrarily 4 elements **/
+  std::vector<double> values;
 } s_smpi_factor_multival_t;
 
 std::vector<s_smpi_factor_multival_t> smpi_os_values;
@@ -793,20 +793,19 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status *
       simcall_process_sleep(nsleeps*smpi_test_sleep);
 
     i = simcall_comm_testany(comms); // The i-th element in comms matches!
-    // not MPI_UNDEFINED, as this is a simix return code
-    if (i != -1) {
+    if (i != -1) { // -1 is not MPI_UNDEFINED but a SIMIX return code. (nothing matches)
       *index = map[i]; 
       finish_wait(&requests[*index], status);
-      if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT))
-      requests[*index] = MPI_REQUEST_NULL;
       flag             = 1;
       nsleeps          = 1;
-    }else{
+      if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT)) {
+        requests[*index] = MPI_REQUEST_NULL;
+      }
+    } else {
       nsleeps++;
     }
-  }else{
-      //all requests are null or inactive, return true
-      flag=1;
+  } else {
+      flag = 0; // all requests are null or inactive, return false
       smpi_empty_status(status);
   }
   xbt_dynar_free(&comms);