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
namespace smpi{
class Topo {
- MPI_Comm comm_;
+ MPI_Comm comm_ = MPI_COMM_NULL;
public:
virtual ~Topo() = default;
MPI_Comm getComm() const { return comm_; }
- void setComm(MPI_Comm comm) { comm_ = comm; }
+ void setComm(MPI_Comm comm);
};
class Topo_Cart: public Topo {
Comm::destroy(smpi_process()->comm_world());
return;
}
- delete comm->topo_; // there's no use count on topos
Comm::unref(comm);
}
if(comm->refcount_==0){
comm->cleanup_smp();
comm->cleanup_attr<Comm>();
+ delete comm->topo_; // there's no use count on topos
delete comm;
}
}
namespace simgrid{
namespace smpi{
+void Topo::setComm(MPI_Comm comm)
+{
+ xbt_assert(not comm_);
+ comm_ = comm;
+ if (comm_)
+ comm_->topo_ = this;
+}
+
/*******************************************************************************
* Cartesian topologies
******************************************************************************/