Dear All, Next feedback is "MPI_Comm_spawn_multiple".
When the function called from MPI_Comm_spawn_multiple failed, Segmentation fault occurs. In that condition, "newcomp" sets NULL. But member of "newcomp" is referred at following part. (ompi/mpi/c/comm_spawn_multiple.c) 176 /* set array of errorcodes */ 177 if (MPI_ERRCODES_IGNORE != array_of_errcodes) { 178 for ( i=0; i < newcomp->c_remote_group->grp_proc_count; i++ ) { 179 array_of_errcodes[i]=rc; 180 } 181 } Attached patch fixes it. (Patch is for V1.4.x). Best regards, Yuki MATSUMOTO MPI development team, Fujitsu
Index: ompi/mpi/c/comm_spawn_multiple.c =================================================================== --- ompi/mpi/c/comm_spawn_multiple.c (revision 25723) +++ ompi/mpi/c/comm_spawn_multiple.c (working copy) @@ -42,7 +42,7 @@ int root, MPI_Comm comm, MPI_Comm *intercomm, int *array_of_errcodes) { - int i=0, rc=0, rank=0, flag; + int i=0, rc=0, rank=0, size=0, flag; ompi_communicator_t *newcomp=NULL; bool send_first=false; /* they are contacting us first */ char port_name[MPI_MAX_PORT_NAME]; @@ -175,8 +175,18 @@ /* set array of errorcodes */ if (MPI_ERRCODES_IGNORE != array_of_errcodes) { - for ( i=0; i < newcomp->c_remote_group->grp_proc_count; i++ ) { - array_of_errcodes[i]=rc; + if (NULL != newcomp) { + for ( i=0; i < newcomp->c_remote_group->grp_proc_count; i++ ) { + array_of_errcodes[i]=rc; + } + } else { + for ( i=0; i < count; i++) { + size = size + array_of_maxprocs[i]; + } + + for ( i=0; i < size; i++) { + array_of_errcodes[i]=rc; + } } }