Bläddra i källkod

AThreads: ThreadInfo for the main thread move to a global var to prevent problems with heap manager

Marcus Sackrow 2 år sedan
förälder
incheckning
0c5256300a
1 ändrade filer med 5 tillägg och 1 borttagningar
  1. 5 1
      rtl/amicommon/athreads.pp

+ 5 - 1
rtl/amicommon/athreads.pp

@@ -83,6 +83,7 @@ type
 
 var
   AThreadManager: TThreadManager;
+  AThreadMainThreadInfo: TThreadInfo;
   AThreadList: PThreadInfo;
   AThreadListLen: LongInt;
   AThreadNum: LongInt;
@@ -394,7 +395,10 @@ begin
       SysDebugLn('FPC AThreads: Entering multithreaded mode...');
 {$endif}
       p:=PProcess(FindTask(nil));
-      new(threadInfo);
+      { the main thread info is allocated as a global var, it is the cleanest solution,
+        as it can never really be freed after threading was initialized, due to clashes
+        with threadvar handling in heap managers, etc. }
+      threadInfo:=@AThreadMainThreadInfo;
       FillChar(threadInfo^,sizeof(TThreadInfo),0);
       p^.pr_Task.tc_UserData:=threadInfo;
       threadInfo^.mainThread:=true;