X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a4fe82686e41ee595eaf2a59434091695ec28b59..f807f3ecd43bd280674b57f277d3af275fbfbaa5:/src/smpi/bindings/smpi_pmpi_group.cpp diff --git a/src/smpi/bindings/smpi_pmpi_group.cpp b/src/smpi/bindings/smpi_pmpi_group.cpp index ea9898fd74..09200e0871 100644 --- a/src/smpi/bindings/smpi_pmpi_group.cpp +++ b/src/smpi/bindings/smpi_pmpi_group.cpp @@ -18,8 +18,10 @@ int PMPI_Group_free(MPI_Group * group) { CHECK_NULL(1, MPI_ERR_ARG, group) CHECK_MPI_NULL(1, MPI_GROUP_NULL, MPI_ERR_GROUP, *group) - if(*group != MPI_COMM_WORLD->group() && *group != MPI_GROUP_EMPTY) + if(*group != MPI_COMM_WORLD->group() && *group != MPI_GROUP_EMPTY){ + (*group)->mark_as_deleted(); simgrid::smpi::Group::unref(*group); + } *group = MPI_GROUP_NULL; return MPI_SUCCESS; } @@ -53,7 +55,7 @@ int PMPI_Group_translate_ranks(MPI_Group group1, int n, const int *ranks1, MPI_G if(ranks1[i]==MPI_PROC_NULL){ ranks2[i]=MPI_PROC_NULL; }else{ - simgrid::s4u::Actor* actor = group1->actor(ranks1[i]); + aid_t actor = group1->actor_pid(ranks1[i]); ranks2[i] = group2->rank(actor); } } @@ -138,7 +140,9 @@ int PMPI_Group_excl(MPI_Group group, int n, const int *ranks, MPI_Group * newgro return MPI_ERR_ARG; } else if (n == 0) { *newgroup = group; - if (group != MPI_COMM_WORLD->group() && group != MPI_COMM_SELF->group() && group != MPI_GROUP_EMPTY) + if (group != MPI_GROUP_EMPTY && + group != MPI_COMM_WORLD->group() && + ((smpi_process()->comm_self_is_set()) || (group != MPI_COMM_SELF->group()))) group->ref(); return MPI_SUCCESS; } else if (n == group->size()) { @@ -198,8 +202,9 @@ int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group * n } if (n == 0) { *newgroup = group; - if (group != MPI_COMM_WORLD->group() && group != MPI_COMM_SELF->group() && - group != MPI_GROUP_EMPTY) + if (group != MPI_GROUP_EMPTY && + group != MPI_COMM_WORLD->group() && + ((smpi_process()->comm_self_is_set()) || (group != MPI_COMM_SELF->group()))) group->ref(); return MPI_SUCCESS; } else {