int PMPI_Errhandler_create(MPI_Handler_function* function, MPI_Errhandler* errhandler){
CHECK_NULL(2, MPI_ERR_ARG, errhandler)
*errhandler=new simgrid::smpi::Errhandler(function);
+ (*errhandler)->add_f();
return MPI_SUCCESS;
}
int refcount_ = 1;
public:
- Info() = default;
- explicit Info(const Info* orig) : map_(orig->map_) {}
+ explicit Info() {this->add_f();}
+ explicit Info(const Info* orig) : map_(orig->map_) {this->add_f();}
~Info() override = default;
void ref();
static void unref(MPI_Info info);
}
void Errhandler::unref(Errhandler* errhandler){
+ if(errhandler == MPI_ERRORS_ARE_FATAL || errhandler == MPI_ERRORS_RETURN)
+ return;
errhandler->refcount_--;
if(errhandler->refcount_==0){
+ F2C::free_f(errhandler->c2f());
delete errhandler;
}
}
}
+
}
void Info::unref(Info* info){
info->refcount_--;
if(info->refcount_==0){
+ F2C::free_f(info->c2f());
delete info;
}
}