* fix memory leak in RegisterLazyInitThreadingProc

git-svn-id: trunk@47311 -
(cherry picked from commit a65158bfe8)
This commit is contained in:
ondrej 2020-11-04 20:10:43 +00:00 committed by florian
parent 8db3828637
commit c0cb2b6051

View File

@ -346,9 +346,30 @@ end;
lazy thread initialization support
---------------------------------------------------------------------}
type
PLazyInitThreadingProcInfo = ^TLazyInitThreadingProcInfo;
TLazyInitThreadingProcInfo = Record
Next : PLazyInitThreadingProcInfo;
Proc : TProcedure;
End;
const
LazyInitThreadingProcList: PLazyInitThreadingProcInfo = nil;
procedure FinalizeLazyInitThreading;
var
LazyInitThreadingProcs : array of TProcedure = nil;
p: PLazyInitThreadingProcInfo;
begin
while assigned(LazyInitThreadingProcList) do
begin
p:=LazyInitThreadingProcList^.Next;
Dispose(LazyInitThreadingProcList);
LazyInitThreadingProcList:=p;
end;
end;
procedure RegisterLazyInitThreadingProc(const proc: TProcedure);
var
p: PLazyInitThreadingProcInfo;
begin
if IsMultiThread then
begin
@ -357,17 +378,25 @@ begin
end
else
begin
SetLength(LazyInitThreadingProcs,Length(LazyInitThreadingProcs)+1);
LazyInitThreadingProcs[high(LazyInitThreadingProcs)]:=proc;
if not assigned(LazyInitThreadingProcList) then
AddExitProc(@FinalizeLazyInitThreading);
new(p);
p^.Next:=LazyInitThreadingProcList;
p^.Proc:=proc;
LazyInitThreadingProcList:=p;
end;
end;
procedure LazyInitThreading;
var
i: Integer;
p: PLazyInitThreadingProcInfo;
begin
for i:=0 to high(LazyInitThreadingProcs) do
LazyInitThreadingProcs[i]();
p:=LazyInitThreadingProcList;
while assigned(p) do
begin
p^.Proc();
p:=p^.Next;
end;
end;
{ ---------------------------------------------------------------------