Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cleanup dup_with_info to avoid leaking in some cases
authorAugustin Degomme <adegomme@gmail.com>
Tue, 30 Apr 2019 12:26:38 +0000 (14:26 +0200)
committerAugustin Degomme <adegomme@gmail.com>
Tue, 30 Apr 2019 13:56:54 +0000 (15:56 +0200)
src/smpi/bindings/smpi_pmpi_comm.cpp
src/smpi/include/smpi_comm.hpp
src/smpi/mpi/smpi_comm.cpp

index dc4d87a..7291ed2 100644 (file)
@@ -113,9 +113,7 @@ int PMPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)
   } else if (newcomm == nullptr) {
     return MPI_ERR_ARG;
   } else {
   } else if (newcomm == nullptr) {
     return MPI_ERR_ARG;
   } else {
-    comm->dup(newcomm);
-    if(info!=MPI_INFO_NULL)
-      (*newcomm)->set_info(info);
+    comm->dup_with_info(info, newcomm);
     return MPI_SUCCESS;
   }
 }
     return MPI_SUCCESS;
   }
 }
index eab2d2c..a71e1f5 100644 (file)
@@ -39,6 +39,7 @@ public:
   Comm() = default;
   Comm(MPI_Group group, MPI_Topology topo, int smp = 0);
   int dup(MPI_Comm* newcomm);
   Comm() = default;
   Comm(MPI_Group group, MPI_Topology topo, int smp = 0);
   int dup(MPI_Comm* newcomm);
+  int dup_with_info(MPI_Info info, MPI_Comm* newcomm);
   MPI_Group group();
   MPI_Topology topo() { return topo_; }
   int size();
   MPI_Group group();
   MPI_Topology topo() { return topo_; }
   int size();
index 7c13694..adb7a99 100644 (file)
@@ -90,6 +90,21 @@ int Comm::dup(MPI_Comm* newcomm){
       }
     }
   }
       }
     }
   }
+  //duplicate info if present
+  if(info_!=MPI_INFO_NULL)
+    (*newcomm)->info_ = new simgrid::smpi::Info(info_);
+  return ret;
+}
+
+int Comm::dup_with_info(MPI_Info info, MPI_Comm* newcomm){
+  int ret = dup(newcomm);
+  if((*newcomm)->info_!=MPI_INFO_NULL){
+    simgrid::smpi::Info::unref((*newcomm)->info_);
+    (*newcomm)->info_=MPI_INFO_NULL;
+  }
+  if(info != MPI_INFO_NULL){
+    (*newcomm)->info_=info;
+  }
   return ret;
 }
 
   return ret;
 }