Block library shutdown until unreaped threads finish spin-waiting
authorJonathan Peyton <jonathan.l.peyton@intel.com>
Thu, 19 Jul 2018 19:17:00 +0000 (19:17 +0000)
committerJonathan Peyton <jonathan.l.peyton@intel.com>
Thu, 19 Jul 2018 19:17:00 +0000 (19:17 +0000)
commita764af68bef54e61c780fd8ef23879c5dbad0f10
treead4e8de4f0dd0664282921faa434132f4e9272db
parenta57d7139b3ac3f71bc550a1469e55411a3a716ab
Block library shutdown until unreaped threads finish spin-waiting

This change fixes possibly invalid access to the internal data structure during
library shutdown.  In a heavily oversubscribed situation, the library shutdown
sequence can reach the point where resources are deallocated while there still
exist threads in their final spinning loop.  The added loop in
__kmp_internal_end() checks if there are such busy-waiting threads and blocks
the shutdown sequence if that is the case. Two versions of kmp_wait_template()
are now used to minimize performance impact.

Patch by Hansang Bae

Differential Revision: https://reviews.llvm.org/D49452

llvm-svn: 337486
openmp/runtime/src/kmp.h
openmp/runtime/src/kmp_runtime.cpp
openmp/runtime/src/kmp_wait_release.cpp
openmp/runtime/src/kmp_wait_release.h