From 578c313a61a1c5501477222b10bb97e960b7229b Mon Sep 17 00:00:00 2001 From: Edgar Gabriel Date: Thu, 5 Aug 2004 22:51:34 +0000 Subject: [PATCH] fixing a minor issue in intercomm_create. adapting group_incl/excl/range_incl/range_excl to return MPI_GROUP_EMPTY in case the new group size is zero. group_union/difference/intersection still to be adapted to handle that scenario. This commit was SVN r1921. --- src/mpi/c/group_excl.c | 6 ++++++ src/mpi/c/group_incl.c | 6 ++++++ src/mpi/c/group_range_excl.c | 6 ++++++ src/mpi/c/group_range_incl.c | 6 ++++++ src/mpi/c/intercomm_create.c | 10 +++++----- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/mpi/c/group_excl.c b/src/mpi/c/group_excl.c index 7f6eaa36dc..605cc1aa2d 100644 --- a/src/mpi/c/group_excl.c +++ b/src/mpi/c/group_excl.c @@ -50,6 +50,12 @@ int MPI_Group_excl(MPI_Group group, int n, int *ranks, } /* end if( MPI_CHECK_ARGS) */ + if ( n == group_pointer->grp_proc_count ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* * pull out elements */ diff --git a/src/mpi/c/group_incl.c b/src/mpi/c/group_incl.c index 6dccff23c1..3cf9d7defa 100644 --- a/src/mpi/c/group_incl.c +++ b/src/mpi/c/group_incl.c @@ -49,6 +49,12 @@ int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *new_group) } /* end if( MPI_CHECK_ARGS) */ + if ( 0 == n ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* get new group struct */ new_group_pointer=ompi_group_allocate(n); if( NULL == new_group_pointer ) { diff --git a/src/mpi/c/group_range_excl.c b/src/mpi/c/group_range_excl.c index 92829dfb22..3e7a67dfa8 100644 --- a/src/mpi/c/group_range_excl.c +++ b/src/mpi/c/group_range_excl.c @@ -136,6 +136,12 @@ int MPI_Group_range_excl(MPI_Group group, int n_triplets, int ranges[][3], /* we have counted the procs to exclude from the list */ new_group_size=group_pointer->grp_proc_count-new_group_size; + if ( 0 == new_group_size ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* allocate a new ompi_group_t structure */ new_group_pointer=ompi_group_allocate(new_group_size); if( NULL == new_group_pointer ) { diff --git a/src/mpi/c/group_range_incl.c b/src/mpi/c/group_range_incl.c index 3538b8918f..3c235cea99 100644 --- a/src/mpi/c/group_range_incl.c +++ b/src/mpi/c/group_range_incl.c @@ -134,6 +134,12 @@ int MPI_Group_range_incl(MPI_Group group, int n_triplets, int ranges[][3], } } + if ( 0 == new_group_size ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* allocate a new ompi_group_t structure */ new_group_pointer=ompi_group_allocate(new_group_size); if( NULL == new_group_pointer ) { diff --git a/src/mpi/c/intercomm_create.c b/src/mpi/c/intercomm_create.c index 2fe7e08306..03c40ac66b 100644 --- a/src/mpi/c/intercomm_create.c +++ b/src/mpi/c/intercomm_create.c @@ -80,12 +80,12 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Request req; /* local leader exchange group sizes lists */ - rc =mca_pml.pml_irecv (&rsize, 1, MPI_INT, remote_leader, tag, bridge_comm, + rc =mca_pml.pml_irecv (&rsize, 1, MPI_INT, rleader, tag, bridge_comm, &req ); if ( rc != MPI_SUCCESS ) { goto err_exit; } - rc = mca_pml.pml_send ( &local_size, 1, MPI_INT, remote_leader, tag, + rc = mca_pml.pml_send ( &local_size, 1, MPI_INT, rleader, tag, MCA_PML_BASE_SEND_STANDARD, bridge_comm ); if ( rc != MPI_SUCCESS ) { goto err_exit; @@ -98,13 +98,13 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, } /* bcast size and list of remote processes to all processes in local_comm */ - rc = local_comm->c_coll.coll_bcast ( &rsize, 1, MPI_INT, local_leader, + rc = local_comm->c_coll.coll_bcast ( &rsize, 1, MPI_INT, lleader, local_comm ); if ( rc != MPI_SUCCESS ) { goto err_exit; } - rprocs = ompi_comm_get_rprocs ( local_comm, bridge_comm, local_leader, + rprocs = ompi_comm_get_rprocs ( local_comm, bridge_comm, lleader, remote_leader, tag, rsize ); if ( NULL == rprocs ) { goto err_exit; @@ -158,7 +158,7 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, } err_exit: - if ( NULL == rprocs ) { + if ( NULL != rprocs ) { free ( rprocs ); } if ( OMPI_SUCCESS != rc ) {