The compiler inserts __cxa_guard_acquire, __cxa_guard_release calls around
the initialization of local static objects to make the initialization
thread safe. However, the implementation of _cxa_guard_acquire in Apple's
libc++abi uses a global lock, which means that only one thread can
initialize a local static variable at a time. This can be a problem if
e.g. the constructor of the variable is blocking while waiting for another
thread ...
This behavior has caused issues so far in webkit and the qml debugging
infrastructure. Better avoid it by using our custom lock implementation.
__cxa_guard_acquire implementation:
http://www.opensource.apple.com/source/libcppabi/libcppabi-24.2/src/cxa_guard.cxx
Task-number: QTBUG-33967
Change-Id: I0d50531ed91ddd074aa07f61f6bf7791e23d990b
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>