diff --git a/ompi/runtime/ompi_mpi_init.c b/ompi/runtime/ompi_mpi_init.c index 5dd1e13f9e..00e450c923 100644 --- a/ompi/runtime/ompi_mpi_init.c +++ b/ompi/runtime/ompi_mpi_init.c @@ -401,8 +401,12 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided, } else if (expected >= OMPI_MPI_STATE_INIT_STARTED) { // In some cases (e.g., oshmem_shmem_init()), we may call // ompi_mpi_init() multiple times. In such cases, just - // silently return successfully. + // silently return successfully once the initializing + // thread has completed. if (reinit_ok) { + while (ompi_mpi_state < OMPI_MPI_STATE_INIT_COMPLETED) { + usleep(1); + } return MPI_SUCCESS; } diff --git a/oshmem/runtime/oshmem_shmem_init.c b/oshmem/runtime/oshmem_shmem_init.c index a150fec439..afd09df1c5 100644 --- a/oshmem/runtime/oshmem_shmem_init.c +++ b/oshmem/runtime/oshmem_shmem_init.c @@ -148,13 +148,6 @@ int oshmem_shmem_init(int argc, char **argv, int requested, int *provided) if (!oshmem_shmem_initialized) { ret = ompi_mpi_init(argc, argv, requested, provided, true); - - // It's posible that another thread is initializing MPI and - // has not completed yet. Keep checking until it is - // completed. - while (ompi_mpi_state < OMPI_MPI_STATE_INIT_COMPLETED) { - usleep(1); - } OMPI_TIMING_NEXT("ompi_mpi_init"); if (OSHMEM_SUCCESS != ret) {