From 6f5f567087c78419d5c23de88e0618dddeb97ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Tue, 26 Nov 2024 08:52:31 +0100 Subject: [PATCH] * Patch from Amexander Bagel to restore Delphi-compatible behaviour in TThread.Queue. Fixes issue #41043 --- rtl/objpas/classes/classes.inc | 17 +---------------- rtl/objpas/classes/classesh.inc | 1 - 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/rtl/objpas/classes/classes.inc b/rtl/objpas/classes/classes.inc index 8cf6f0fa97..8385af91af 100644 --- a/rtl/objpas/classes/classes.inc +++ b/rtl/objpas/classes/classes.inc @@ -413,7 +413,6 @@ procedure TThread.InitSynchronizeEvent; New(FSynchronizeEntry); FillChar(FSynchronizeEntry^, SizeOf(TThreadQueueEntry), 0); FSynchronizeEntry^.Thread := Self; - FSynchronizeEntry^.ThreadID := ThreadID; {$ifdef FPC_HAS_FEATURE_THREADING} FSynchronizeEntry^.SyncEvent := RtlEventCreate; {$else} @@ -461,10 +460,8 @@ class procedure TThread.Synchronize(AThread: TThread; AMethod: TThreadMethod); New(syncentry); FillChar(syncentry^, SizeOf(TThreadQueueEntry), 0); {$ifdef FPC_HAS_FEATURE_THREADING} - syncentry^.ThreadID := GetCurrentThreadID; syncentry^.SyncEvent := RtlEventCreate; {$else} - syncentry^.ThreadID := 0{GetCurrentThreadID}; syncentry^.SyncEvent := nil{RtlEventCreate}; {$endif} end; @@ -515,10 +512,8 @@ class procedure TThread.Synchronize(AThread: TThread; AProcedure: TThreadProcedu New(syncentry); FillChar(syncentry^, SizeOf(TThreadQueueEntry), 0); {$ifdef FPC_HAS_FEATURE_THREADING} - syncentry^.ThreadID := GetCurrentThreadID; syncentry^.SyncEvent := RtlEventCreate; {$else} - syncentry^.ThreadID := 0{GetCurrentThreadID}; syncentry^.SyncEvent := nil{RtlEventCreate}; {$endif} end; @@ -688,11 +683,6 @@ begin New(queueentry); FillChar(queueentry^, SizeOf(TThreadQueueEntry), 0); queueentry^.Thread := aThread; -{$ifdef FPC_HAS_FEATURE_THREADING} - queueentry^.ThreadID := GetCurrentThreadID; -{$else} - queueentry^.ThreadID := 0{GetCurrentThreadID}; -{$endif} queueentry^.Method := aMethod; { the queueentry is freed by CheckSynchronize (or by RemoveQueuedEvents) } @@ -707,11 +697,6 @@ begin New(queueentry); FillChar(queueentry^, SizeOf(TThreadQueueEntry), 0); queueentry^.Thread := aThread; -{$ifdef FPC_HAS_FEATURE_THREADING} - queueentry^.ThreadID := GetCurrentThreadID; -{$else} - queueentry^.ThreadID := 0{GetCurrentThreadID}; -{$endif} queueentry^.ThreadProc := aProcedure; { the queueentry is freed by CheckSynchronize (or by RemoveQueuedEvents) } @@ -756,7 +741,7 @@ begin { only entries not added by Synchronize } not Assigned(entry^.SyncEvent) { check for the thread } - and (not Assigned(aThread) or (entry^.Thread = aThread) or (entry^.ThreadID = aThread.ThreadID)) + and (not Assigned(aThread) or (entry^.Thread = aThread)) { check for the method } and (not Assigned(aMethod) or ( diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index 605e03858b..0629b96c81 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -2253,7 +2253,6 @@ type ThreadProc: TThreadProcedure; {$endif} Thread: TThread; - ThreadID: TThreadID; Exception: TObject; SyncEvent: PRtlEvent; Next: PThreadQueueEntry;