Browse Source

Fix to be able to allocate threadvars when non-rtl code creates a new thread

git-svn-id: trunk@5475 -
michael 19 years ago
parent
commit
d4c30020ee
1 changed files with 14 additions and 4 deletions
  1. 14 4
      rtl/win/systhrd.inc

+ 14 - 4
rtl/win/systhrd.inc

@@ -86,10 +86,6 @@ CONST
       end;
 
 
-    function SysRelocateThreadvar(offset : dword) : pointer;
-      begin
-        SysRelocateThreadvar:=TlsGetValue(tlskey)+Offset;
-      end;
 
 
     procedure SysAllocateThreadVars;
@@ -105,6 +101,20 @@ CONST
         TlsSetValue(tlskey,dataindex);
       end;
 
+    function SysRelocateThreadvar(offset : dword) : pointer;
+	var
+        dataindex : pointer;
+      begin
+        dataindex := TlsGetValue(tlskey);
+        if dataindex = nil then begin
+          SysAllocateThreadVars;
+          dataindex := TlsGetValue(tlskey);
+        end;
+        SysRelocateThreadvar:=DataIndex+Offset;
+{
+      begin
+        SysRelocateThreadvar:=TlsGetValue(tlskey)+Offset;
+}      end;
 
     procedure SysReleaseThreadVars;
       begin