+ initialize threadvars defined local in units

This commit is contained in:
armin 2002-03-28 16:31:35 +00:00
parent 284f3764d8
commit 903441aa51
2 changed files with 80 additions and 2 deletions

View File

@ -90,6 +90,42 @@ begin
Inc (ThreadVarBlockSize, Size);
end;
type ltvInitEntry =
record
varaddr : pdword;
size : longint;
end;
pltvInitEntry = ^ltvInitEntry;
procedure init_unit_threadvars (tableEntry : pltvInitEntry);
begin
while tableEntry^.varaddr <> nil do
begin
init_threadvar (tableEntry^.varaddr^, tableEntry^.size);
inc (pchar (tableEntry), sizeof (tableEntry^));
end;
end;
type TltvInitTablesTable =
record
count : dword;
tables: array [1..32767] of pltvInitEntry;
end;
var
ThreadvarTablesTable : TltvInitTablesTable; external name 'FPC_LOCALTHREADVARTABLES';
procedure init_all_unit_threadvars; [public,alias: 'FPC_INITIALIZELOCALTHREADVARS'];
var i : integer;
begin
{$ifdef DEBUG_MT}
WriteLn ('init_all_unit_threadvars (%d) units',ThreadvarTablesTable.count);
{$endif}
for i := 1 to ThreadvarTablesTable.count do
init_unit_threadvars (ThreadvarTablesTable.tables[i]);
end;
function Relocate_ThreadVar (TVOffset: dword): pointer;
[public,alias: 'FPC_RELOCATE_THREADVAR'];
begin
@ -325,7 +361,10 @@ end;
{
$Log$
Revision 1.6 2001-10-23 21:51:03 peter
Revision 1.7 2002-03-28 16:34:29 armin
+ initialize threadvars defined local in units
Revision 1.6 2001/10/23 21:51:03 peter
* criticalsection renamed to rtlcriticalsection for kylix compatibility
Revision 1.5 2001/10/09 02:42:05 carl

View File

@ -57,6 +57,42 @@ procedure init_threadvar(var offset : dword;size : dword);[public,alias: 'FPC_IN
offset:=threadvarblocksize;
inc(threadvarblocksize,size);
end;
type ltvInitEntry =
record
varaddr : pdword;
size : longint;
end;
pltvInitEntry = ^ltvInitEntry;
procedure init_unit_threadvars (tableEntry : pltvInitEntry);
begin
while tableEntry^.varaddr <> nil do
begin
init_threadvar (tableEntry^.varaddr^, tableEntry^.size);
inc (pchar (tableEntry), sizeof (tableEntry^));
end;
end;
type TltvInitTablesTable =
record
count : dword;
tables: array [1..32767] of pltvInitEntry;
end;
var
ThreadvarTablesTable : TltvInitTablesTable; external name 'FPC_LOCALTHREADVARTABLES';
procedure init_all_unit_threadvars; [public,alias: 'FPC_INITIALIZELOCALTHREADVARS'];
var i : integer;
begin
{$ifdef DEBUG_MT}
WriteLn ('init_all_unit_threadvars (%d) units',ThreadvarTablesTable.count);
{$endif}
for i := 1 to ThreadvarTablesTable.count do
init_unit_threadvars (ThreadvarTablesTable.tables[i]);
end;
function relocate_threadvar(offset : dword) : pointer;[public,alias: 'FPC_RELOCATE_THREADVAR'];
@ -213,7 +249,10 @@ procedure LeaveCriticalSection(var cs : TRTLCriticalSection);
{
$Log$
Revision 1.6 2001-10-23 21:51:03 peter
Revision 1.7 2002-03-28 16:31:35 armin
+ initialize threadvars defined local in units
Revision 1.6 2001/10/23 21:51:03 peter
* criticalsection renamed to rtlcriticalsection for kylix compatibility
Revision 1.5 2001/10/09 02:38:39 carl