Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Link Topo and Comm in both directions, and fix memory leak.
[simgrid.git] / src / smpi / include / smpi_comm.hpp
index 27d71bd..3f57cfa 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <list>
 #include <string>
+#include "smpi_errhandler.hpp"
 #include "smpi_keyvals.hpp"
 #include "smpi_group.hpp"
 #include "smpi_topo.hpp"
@@ -16,6 +17,7 @@ namespace simgrid{
 namespace smpi{
 
 class Comm : public F2C, public Keyval{
+  friend Topo;
   MPI_Group group_;
   SMPI_Topo_type topoType_;
   MPI_Topology topo_; // to be replaced by an union
@@ -27,11 +29,12 @@ class Comm : public F2C, public Keyval{
   int is_uniform_;
   int* non_uniform_map_;        // set if smp nodes have a different number of processes allocated
   int is_blocked_;              // are ranks allocated on the same smp node contiguous ?
-  int is_smp_comm_;             // set to 0 in case this is already an intra-comm or a leader-comm to avoid recursivity
+  int is_smp_comm_;             // set to 0 in case this is already an intra-comm or a leader-comm to avoid recursion
   std::list<MPI_Win> rma_wins_; // attached windows for synchronization.
   std::string name_;
   MPI_Info info_;
   int id_;
+  MPI_Errhandler errhandler_;
 
 public:
   static std::unordered_map<int, smpi_key_elem> keyvals_;
@@ -50,6 +53,8 @@ public:
   void set_name(const char* name);
   MPI_Info info();
   void set_info( MPI_Info info);
+  MPI_Errhandler errhandler();
+  void set_errhandler( MPI_Errhandler errhandler);
   void set_leaders_comm(MPI_Comm leaders);
   void set_intra_comm(MPI_Comm leaders) { intra_comm_ = leaders; };
   int* get_non_uniform_map();