mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-11 18:49:14 +02:00
* fixed datarace in CBeginThread
git-svn-id: trunk@5274 -
This commit is contained in:
parent
df6fec5301
commit
4240479f5d
@ -326,7 +326,7 @@ const
|
||||
|
||||
{ assume that this program will not spawn other threads, when the
|
||||
first thread is started the following constants need to be filled }
|
||||
IsMultiThread : boolean = FALSE;
|
||||
IsMultiThread : longbool = FALSE;
|
||||
{ set to true, if a threading helper is used before a thread
|
||||
manager has been installed }
|
||||
ThreadingAlreadyUsed : boolean = FALSE;
|
||||
|
@ -201,12 +201,14 @@ Type PINTRTLEvent = ^TINTRTLEvent;
|
||||
{$endif DEBUG_MT}
|
||||
{ Initialize multithreading if not done }
|
||||
if not IsMultiThread then
|
||||
begin
|
||||
{ We're still running in single thread mode, setup the TLS }
|
||||
pthread_key_create(@TLSKey,nil);
|
||||
InitThreadVars(@CRelocateThreadvar);
|
||||
IsMultiThread:=true;
|
||||
end;
|
||||
begin
|
||||
if (InterLockedExchange(longint(IsMultiThread),1) = 0) then
|
||||
begin
|
||||
{ We're still running in single thread mode, setup the TLS }
|
||||
pthread_key_create(@TLSKey,nil);
|
||||
InitThreadVars(@CRelocateThreadvar);
|
||||
end
|
||||
end;
|
||||
{ the only way to pass data to the newly created thread
|
||||
in a MT safe way, is to use the heap }
|
||||
new(ti);
|
||||
|
Loading…
Reference in New Issue
Block a user