Folks, currently, the dynamic/intercomm_create test from the ibm test suite output the following messages :
dpm_base_disconnect_init: error -12 in isend to process 1 the root cause it task 0 tries to send messages to already exited tasks. one way of seeing things is that this is an application issue : task 0 should have MPI_Comm_free'd all its communicator before calling MPI_Comm_disconnect. This can be achieved via the attached patch an other way of seeing things is that this is a bug in OpenMPI. In this case, what would be the the right approach ? - automatically free communicators (if needed) when MPI_Comm_disconnect is invoked ? - simply remove communicators (if needed) from ompi_mpi_communicators when MPI_Comm_disconnect is invoked ? /* this causes a memory leak, but the application can be seen as responsible of it */ - other ? Thanks in advance for your feedback, Gilles
Index: ibm/dynamic/intercomm_create.c =================================================================== --- ibm/dynamic/intercomm_create.c (revision 2370) +++ ibm/dynamic/intercomm_create.c (working copy) @@ -104,6 +104,10 @@ err = MPI_Barrier(abc_intra); printf( "%s: barrier (%d)\n", whoami, err ); + MPI_Comm_free(&abc_intra); + MPI_Comm_free(&ab_c_inter); + MPI_Comm_free(&ab_intra); + MPI_Comm_free(&ac_intra); MPI_Comm_disconnect(&ab_inter); MPI_Comm_disconnect(&ac_inter); }