// RLebeau 6/7/2016: there are race conditions if multiple threads call
// TThread.Synchronize() on the same TThread object at the same time
// (such as this unit's GNotifyThread object)...
{$IFDEF HAS_STATIC_TThread_Synchronize}
// Fortunately, the static versions of TThread.Synchronize() can skip the
// race conditions when the AThread parameter is nil, so we are safe here...
TThread.Synchronize(nil, SyncProc);
{$ELSE}
// However, in Delphi 7 and later, the static versions of TThread.Synchronize()
// call the non-static versions when AThread is not nil, and the non-static
// versions are not even close to being thread-safe (see QualityPortal #RSP-15139).
// They share a private FSynchronize variable that is not protected from
// concurrent access.
Partager