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(); > > >