diff --git a/ompi/runtime/ompi_mpi_init.c b/ompi/runtime/ompi_mpi_init.c index a456f02a8e4..8a45aa52d5f 100644 --- a/ompi/runtime/ompi_mpi_init.c +++ b/ompi/runtime/ompi_mpi_init.c @@ -398,8 +398,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 9ecd10f1909..da220aa4843 100644 --- a/oshmem/runtime/oshmem_shmem_init.c +++ b/oshmem/runtime/oshmem_shmem_init.c @@ -146,13 +146,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); - } - if (OSHMEM_SUCCESS != ret) { return ret; }