* fixed datarace in CBeginThread

git-svn-id: trunk@5274 -
This commit is contained in:
Jonas Maebe 2006-11-07 14:05:09 +00:00
parent df6fec5301
commit 4240479f5d
2 changed files with 9 additions and 7 deletions

View File

@ -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;

View File

@ -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);