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 ) {