Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add initialization/finalization check at each call.
authorAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 9 Apr 2021 01:35:07 +0000 (03:35 +0200)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 9 Apr 2021 09:10:25 +0000 (11:10 +0200)
Side effect was to break calls from external threads (gh-139).. So mark them as initialized properly at creation.

src/smpi/include/private.hpp
src/smpi/internals/smpi_global.cpp

index 8087aa3..9f53c12 100644 (file)
@@ -530,6 +530,15 @@ XBT_PRIVATE void private_execute_flops(double flops);
     }\
   }
 
+#define CHECK_INIT\
+  {\
+    int init_flag=0;\
+    PMPI_Initialized(&init_flag);\
+    CHECK_ARGS((!init_flag), MPI_ERR_OTHER, "%s: MPI_Init was not called !", __func__)\
+    PMPI_Finalized(&init_flag);\
+    CHECK_ARGS((init_flag), MPI_ERR_OTHER, "%s: MPI_Finalize was already called !", __func__)\
+  }
+
 #define CHECK_MPI_NULL(num, val, err, ptr)\
   CHECK_ARGS((ptr) == (val), (err),\
              "%s: param %d %s cannot be %s", __func__, (num), _XBT_STRINGIFY(ptr), _XBT_STRINGIFY(val))
@@ -559,6 +568,7 @@ XBT_PRIVATE void private_execute_flops(double flops);
 
 #define CHECK_COMM(num)\
   {\
+    CHECK_INIT\
     CHECK_COMM2((num), comm)\
     CHECK_DELETED((num), MPI_ERR_COMM, comm)\
     simgrid::smpi::utils::set_current_handle(comm);\
index f10b47c..33baf23 100644 (file)
@@ -624,4 +624,5 @@ void smpi_mpi_init() {
 
 void SMPI_thread_create() {
   TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__);
+  smpi_process()->mark_as_initialized();
 }