void mpi_comm_free_(int* comm, int* ierr) {
MPI_Comm tmp = simgrid::smpi::Comm::f2c(*comm);
-
- *ierr = MPI_Comm_free(&tmp);
-
- if(*ierr == MPI_SUCCESS) {
+ if(tmp != MPI_COMM_WORLD && tmp != MPI_COMM_NULL) {
+ simgrid::smpi::Comm::destroy(tmp);
simgrid::smpi::Comm::free_f(*comm);
}
+ *ierr = MPI_SUCCESS;
}
void mpi_comm_split_(int* comm, int* color, int* key, int* comm_out, int* ierr) {
void mpi_comm_connect_ ( char *port_name, int* info, int* root, int* comm, int*newcomm, int* ierr){
MPI_Comm tmp;
- *ierr = MPI_Comm_connect( port_name, *reinterpret_cast<MPI_Info*>(info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp);
+ *ierr = MPI_Comm_connect( port_name, simgrid::smpi::Info::f2c(*info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp);
if(*ierr == MPI_SUCCESS) {
*newcomm = tmp->add_f();
}
void mpi_comm_accept_ ( char *port_name, int* info, int* root, int* comm, int*newcomm, int* ierr){
MPI_Comm tmp;
- *ierr = MPI_Comm_accept( port_name, *reinterpret_cast<MPI_Info*>(info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp);
+ *ierr = MPI_Comm_accept( port_name, simgrid::smpi::Info::f2c(*info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp);
if(*ierr == MPI_SUCCESS) {
*newcomm = tmp->add_f();
}
void mpi_comm_spawn_ ( char *command, char *argv, int* maxprocs, int* info, int* root, int* comm, int* intercomm,
int* array_of_errcodes, int* ierr){
MPI_Comm tmp;
- *ierr = MPI_Comm_spawn( command, &argv, *maxprocs, *reinterpret_cast<MPI_Info*>(info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp,
+ *ierr = MPI_Comm_spawn( command, &argv, *maxprocs, simgrid::smpi::Info::f2c(*info), *root, simgrid::smpi::Comm::f2c(*comm), &tmp,
array_of_errcodes);
if(*ierr == MPI_SUCCESS) {
*intercomm = tmp->add_f();