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;
+ }
}
}