* SysAllocateThreadVars: Make sure the data slot is only allocated once

git-svn-id: trunk@17891 -
This commit is contained in:
pierre 2011-07-01 10:07:38 +00:00
parent 04d85d32d9
commit 1339c66ec9

View File

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