* Merging revisions 41819 from trunk:

------------------------------------------------------------------------
    r41819 | michael | 2019-04-01 19:31:20 +0200 (Mon, 01 Apr 2019) | 1 line
    
    * Fix bug #35305, lazy instantiation of class alias list. Patch from Ondrej Pokorny
    ------------------------------------------------------------------------

git-svn-id: branches/fixes_3_2@42417 -
This commit is contained in:
michael 2019-07-13 13:20:06 +00:00
parent d18904d076
commit b3760f5daa
2 changed files with 12 additions and 5 deletions

View File

@ -2491,7 +2491,7 @@ begin
FindGlobalComponentList:=nil;
IntConstList := TThreadList.Create;
ClassList := TThreadList.Create;
ClassAliasList := TStringList.Create;
ClassAliasList := nil;
{ on unix this maps to a simple rw synchornizer }
GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create;
RegisterInitComponentHandler(TComponent,@DefaultInitHandler);

View File

@ -44,9 +44,13 @@ procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string);
var
I : integer;
begin
I:=-1;
ClassList.LockList;
try
i := ClassAliasList.IndexOf(Alias);
if ClassAliasList=nil then
ClassAliasList := TStringList.Create
else
i := ClassAliasList.IndexOf(Alias);
if I = -1 then
ClassAliasList.AddObject( Alias, TObject(AClass) );
finally
@ -101,16 +105,19 @@ begin
Result := TPersistentClass(Items[I]);
if Result.ClassNameIs(AClassName) then Exit;
end;
if Assigned(ClassAliasList) then
begin
I := ClassAliasList.Indexof(AClassName);
if I >= 0 then //found
Begin
Result := TPersistentClass(ClassAliasList.Objects[i]);
exit;
end;
end;
Result := nil;
finally
ClassList.Unlocklist;
end;
finally
ClassList.Unlocklist;
end;
end;