diff --git a/src/communicator/comm_init.c b/src/communicator/comm_init.c index 4d0bffdd3c..c2930ea4fd 100644 --- a/src/communicator/comm_init.c +++ b/src/communicator/comm_init.c @@ -265,6 +265,7 @@ static void ompi_comm_construct(ompi_communicator_t* comm) memset (&(comm->c_coll), 0, sizeof(mca_coll_base_module_1_0_0_t)); #endif + comm->c_coll_selected_component = NULL; comm->c_coll_selected_module = NULL; comm->c_coll_selected_data = NULL; comm->c_coll_basic_module = NULL; diff --git a/src/communicator/communicator.h b/src/communicator/communicator.h index c6c321cd6b..481e33560b 100644 --- a/src/communicator/communicator.h +++ b/src/communicator/communicator.h @@ -110,6 +110,8 @@ struct ompi_communicator_t { /**< Selected collective module, saved by value for speed (instead of by reference) */ + const mca_coll_base_component_1_0_0_t *c_coll_selected_component; + /**< Selected coll component */ const mca_coll_base_module_1_0_0_t *c_coll_selected_module; /**< The selected module, but only when the selected module is not* the basic module. Used during comm_unselect(). */ diff --git a/src/mca/coll/base/coll_base_comm_select.c b/src/mca/coll/base/coll_base_comm_select.c index 149e5d977c..f042839658 100644 --- a/src/mca/coll/base/coll_base_comm_select.c +++ b/src/mca/coll/base/coll_base_comm_select.c @@ -119,6 +119,7 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm, comm->c_coll = null_module; + comm->c_coll_selected_component = NULL; comm->c_coll_selected_data = NULL; comm->c_coll_selected_module = NULL; @@ -250,6 +251,7 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm, NULL function pointers with those from basic, and then initialize it. */ + comm->c_coll_selected_component = selected_component; if (!using_basic) { comm->c_coll = *selected_module; replace_null_with_basic(comm); diff --git a/src/mpi/c/comm_dup.c b/src/mpi/c/comm_dup.c index 203d5cdee3..d27933f4e0 100644 --- a/src/mpi/c/comm_dup.c +++ b/src/mpi/c/comm_dup.c @@ -77,7 +77,7 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) rprocs, /* remote_procs */ comp->c_keyhash, /* attrs */ comp->error_handler, /* error handler */ - comp->c_topo_component /* topo module */ + comp->c_topo_component /* topo component */ ); if ( MPI_SUCCESS != rc) { return OMPI_ERRHANDLER_INVOKE (comm, rc, FUNC_NAME); @@ -91,7 +91,7 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) NULL, /* remote_leader */ mode, /* mode */ -1, /* send_first */ - (mca_base_component_t*) comp->c_coll_selected_module /* coll module */ + comp->c_coll_selected_component /* coll component */ ); if ( MPI_SUCCESS != rc ) { return OMPI_ERRHANDLER_INVOKE(comm, rc, FUNC_NAME);