27f3d417ca
The problem is that the waiting thread is cycling using OMPI_LAZY_WAIT_FOR_COMPLETION so it can exercise opal_progress. This probably isn't as critical for the modex step, but definitely necessary for the barrier at the end of mpi_init. The problem this creates is that the lazy macro exits as soon as "active" becomes false, and then we destruct the lock. However, wakeup_thread sets "active" to false - and then calls the condition broadcast to wakeup any waiting threads. So there is a race condition between that broadcast and the lock destruct. Add OPAL_ACQUIRE_OBJECT and OPAL_POST_OBJECT memory barriers to help protect against thread race conditions on some platforms Signed-off-by: Ralph Castain <rhc@open-mpi.org> |
||
---|---|---|
.. | ||
help-mpi-runtime.txt | ||
Makefile.am | ||
mpiruntime.h | ||
ompi_cr.c | ||
ompi_cr.h | ||
ompi_info_support.c | ||
ompi_info_support.h | ||
ompi_mpi_abort.c | ||
ompi_mpi_dynamics.c | ||
ompi_mpi_finalize.c | ||
ompi_mpi_init.c | ||
ompi_mpi_params.c | ||
ompi_mpi_preconnect.c | ||
params.h |