Re: [OMPI devel] [PATCH]Segmentation Fault occurs when the function called from MPI_Comm_spawn_multiple fails

2012-02-09 Thread Ralph Castain
Thanks! I added the patch to the trunk and submitted it for the 1.6 update.

On Feb 8, 2012, at 10:20 PM, Y.MATSUMOTO wrote:

> 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
> 
> ___
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel



[OMPI devel] [PATCH]Segmentation Fault occurs when the function called from MPI_Comm_spawn_multiple fails

2012-02-09 Thread Y.MATSUMOTO
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;
+}
 }
 }