mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-09 21:29:15 +02:00
* SysAllocateThreadVars: Make sure the data slot is only allocated once
git-svn-id: trunk@17891 -
This commit is contained in:
parent
04d85d32d9
commit
1339c66ec9
@ -113,14 +113,21 @@ var
|
||||
procedure SysAllocateThreadVars;
|
||||
var
|
||||
dataindex : pointer;
|
||||
errorsave : dword;
|
||||
begin
|
||||
{ we've to allocate the memory from system }
|
||||
{ because the FPC heap management uses }
|
||||
{ exceptions which use threadvars but }
|
||||
{ these aren't allocated yet ... }
|
||||
{ allocate room on the heap for the thread vars }
|
||||
dataindex:=pointer(LocalAlloc(LMEM_FIXED or LMEM_ZEROINIT,threadvarblocksize));
|
||||
TlsSetValue(tlskey,dataindex);
|
||||
errorsave:=GetLastError;
|
||||
dataindex:=TlsGetValue(tlskey);
|
||||
if dataindex=nil then
|
||||
begin
|
||||
dataindex:=pointer(LocalAlloc(LMEM_FIXED or LMEM_ZEROINIT,threadvarblocksize));
|
||||
TlsSetValue(tlskey,dataindex);
|
||||
end;
|
||||
SetLastError(errorsave);
|
||||
end;
|
||||
|
||||
function SysRelocateThreadvar(offset : dword) : pointer; forward;
|
||||
@ -154,7 +161,7 @@ var
|
||||
var
|
||||
dataindex : pointer;
|
||||
errorsave : dword;
|
||||
begin
|
||||
begin
|
||||
{$ifdef dummy}
|
||||
{ it least in the on windows 7 x64, this still doesn't not work, fs:(0x2c) is
|
||||
self referencing on this system (FK)
|
||||
|
Loading…
Reference in New Issue
Block a user