Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
attempt to fix en issue when timing functions are called before initialization
[simgrid.git] / src / smpi / mpi / smpi_op.cpp
index bac540c..cda3387 100644 (file)
@@ -217,23 +217,22 @@ static void no_func(void*, void*, int*, MPI_Datatype*)
 }
 
 #define CREATE_MPI_OP(name, func)                                                                                      \
-  static SMPI_Op _XBT_CONCAT(mpi_, name)(&(func) /* func */, true, true);                                              \
-  MPI_Op name = &_XBT_CONCAT(mpi_, name);
-
-CREATE_MPI_OP(MPI_MAX, max_func)
-CREATE_MPI_OP(MPI_MIN, min_func)
-CREATE_MPI_OP(MPI_SUM, sum_func)
-CREATE_MPI_OP(MPI_PROD, prod_func)
-CREATE_MPI_OP(MPI_LAND, land_func)
-CREATE_MPI_OP(MPI_LOR, lor_func)
-CREATE_MPI_OP(MPI_LXOR, lxor_func)
-CREATE_MPI_OP(MPI_BAND, band_func)
-CREATE_MPI_OP(MPI_BOR, bor_func)
-CREATE_MPI_OP(MPI_BXOR, bxor_func)
-CREATE_MPI_OP(MPI_MAXLOC, maxloc_func)
-CREATE_MPI_OP(MPI_MINLOC, minloc_func)
-CREATE_MPI_OP(MPI_REPLACE, replace_func)
-CREATE_MPI_OP(MPI_NO_OP, no_func)
+  SMPI_Op _XBT_CONCAT(smpi_MPI_, name)(&(func) /* func */, true, true);                                              \
+
+CREATE_MPI_OP(MAX, max_func)
+CREATE_MPI_OP(MIN, min_func)
+CREATE_MPI_OP(SUM, sum_func)
+CREATE_MPI_OP(PROD, prod_func)
+CREATE_MPI_OP(LAND, land_func)
+CREATE_MPI_OP(LOR, lor_func)
+CREATE_MPI_OP(LXOR, lxor_func)
+CREATE_MPI_OP(BAND, band_func)
+CREATE_MPI_OP(BOR, bor_func)
+CREATE_MPI_OP(BXOR, bxor_func)
+CREATE_MPI_OP(MAXLOC, maxloc_func)
+CREATE_MPI_OP(MINLOC, minloc_func)
+CREATE_MPI_OP(REPLACE, replace_func)
+CREATE_MPI_OP(NO_OP, no_func)
 
 namespace simgrid{
 namespace smpi{
@@ -270,8 +269,10 @@ void Op::ref(){
 void Op::unref(MPI_Op* op){
   if((*op)!=MPI_OP_NULL){
     (*op)->refcount_--;
-    if ((*op)->refcount_ == 0 && not (*op)->predefined_)
+    if ((*op)->refcount_ == 0 && not (*op)->is_predefined_){
+      F2C::free_f((*op)->c2f());
       delete(*op);
+    }
   }
 }