Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
yet another attempt to handle MPI special values in fortran
[simgrid.git] / src / smpi / mpi / smpi_op.cpp
index e81b93f..0da76e4 100644 (file)
@@ -196,7 +196,7 @@ static void no_func(void*, void*, int*, MPI_Datatype*)
 }
 
 #define CREATE_MPI_OP(name, func)                             \
-  static SMPI_Op mpi_##name (&(func) /* func */, true ); \
+  static SMPI_Op mpi_##name (&(func) /* func */, true, true ); \
 MPI_Op name = &mpi_##name;
 
 CREATE_MPI_OP(MPI_MAX, max_func);
@@ -242,5 +242,17 @@ Op* Op::f2c(int id){
   return static_cast<Op*>(F2C::f2c(id));
 }
 
+void Op::ref(){
+  refcount_++;
+}
+
+void Op::unref(MPI_Op* op){
+  if((*op)!=MPI_OP_NULL){
+    (*op)->refcount_--;
+    if((*op)->refcount_==0 && (*op)->predefined_==false)
+      delete(*op);
+  }
+}
+
 }
 }