Ralph,

what if ?

the parent :
MPI_Comm_free(&merged);
MPI_Comm_disconnect(&comm);

and the child
MPI_Comm_free(&merged);
MPI_Comm_disconnect(&parent);

Gilles


> Good point - however, that doesn't fix it. Changing the Comm_free calls to
> Comm_disconnect results in the same error messages when the parent
> finalizes:
>
> Parent:
>     MPI_Init( &argc, &argv);
>
>     for (iter = 0; iter < 100; ++iter) {
>         MPI_Comm_spawn(EXE_TEST, NULL, 1, MPI_INFO_NULL,
>                        0, MPI_COMM_WORLD, &comm, &err);
>         printf("parent: MPI_Comm_spawn #%d return : %d\n", iter, err);
>
>         MPI_Intercomm_merge(comm, 0, &merged);
>         MPI_Comm_rank(merged, &rank);
>         MPI_Comm_size(merged, &size);
>         printf("parent: MPI_Comm_spawn #%d rank %d, size %d\n",
>                iter, rank, size);
>         MPI_Comm_disconnect(&merged);
>     }
>
>     MPI_Finalize();
>
>
> Child:
>     MPI_Init(&argc, &argv);
>     printf("Child: launch\n");
>     MPI_Comm_get_parent(&parent);
>     MPI_Intercomm_merge(parent, 1, &merged);
>     MPI_Comm_rank(merged, &rank);
>     MPI_Comm_size(merged, &size);
>     printf("Child merged rank = %d, size = %d\n", rank, size);
>
>
>     MPI_Comm_disconnect(&merged);
>     MPI_Finalize();
>
>
>

Reply via email to