Page MenuHomePhabricator

Block library shutdown until unreaped threads finish spin-waiting
ClosedPublic

Authored by hbae on Jul 17 2018, 1:49 PM.

Details

Summary

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.

Diff Detail

Repository
rL LLVM

Event Timeline

hbae created this revision.Jul 17 2018, 1:49 PM
This revision is now accepted and ready to land.Jul 19 2018, 10:16 AM
This revision was automatically updated to reflect the committed changes.