This is a resubmit of r210600 (Differential Revision D4076). This probably only needs a quick glance since the previous change was already reviewed, however this change differs from the previous submission in 2 important ways:
- Conversions from sys::Mutex to std::[recursive_]mutex are removed, to reduce the scope of the changes. Those will be submitted later as a separate changelist.
- Making ErrorHandling.cpp thread-safe was handled as a separate changelist (see D4140)
To be pedantic, all implementations exhibit undefined behaviour if a mutex destroyed while owned, although the nature of that behavior may be different.