Possible problem code see below: initialization _threads := TPCThreadList<TPCThread>.Create('GLOBAL_THREADS'); finalization FreeAndNil(_threads); end. Release: " This function can raise EXCEPTION_POSSIBLE_DEADLOCK if a wait operation on the critical section times out. The timeout interval is specified by the following registry value: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CriticalSectionTimeout. Do not handle a possible deadlock exception; instead, debug the application. If a critical section is deleted while it is still owned, the state of the threads waiting for ownership of the deleted critical section is undefined. While a process is exiting, if a call to EnterCriticalSection would block, it will instead terminate the process immediately. This may cause global destructors to not be called. ""