diff --git a/rtl/objpas/classes/classes.inc b/rtl/objpas/classes/classes.inc index 1e7becf4a8..dd146af4a0 100644 --- a/rtl/objpas/classes/classes.inc +++ b/rtl/objpas/classes/classes.inc @@ -265,6 +265,7 @@ begin inherited Create; {$ifdef FPC_HAS_FEATURE_THREADING} InterlockedIncrement(ThreadQueueLockCounter); + FThreadQueueLockCounted := true; { Guard against exception in descendant’s Create. } {$endif} if FExternalThread then {$ifdef FPC_HAS_FEATURE_THREADING} @@ -289,7 +290,7 @@ begin RemoveQueuedEvents(Self); DoneSynchronizeEvent; {$ifdef FPC_HAS_FEATURE_THREADING} - if InterlockedDecrement(ThreadQueueLockCounter)=0 then + if FThreadQueueLockCounted and (InterlockedDecrement(ThreadQueueLockCounter)=0) then DoneCriticalSection(ThreadQueueLock); {$endif} { set CurrentThreadVar to Nil? } diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index 663429cd77..57cf3fd8db 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -2230,7 +2230,7 @@ type FReturnValue: Integer; FOnTerminate: TNotifyEvent; FFatalException: TObject; - FExternalThread: Boolean; + FExternalThread, FThreadQueueLockCounted: Boolean; FSynchronizeEntry: PThreadQueueEntry; class function GetCurrentThread: TThread; static; class function GetIsSingleProcessor: Boolean; static; inline;