mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 01:45:57 +02:00
* Create container with unique name, improve thread-safety
This commit is contained in:
parent
cdc6ff0a30
commit
fc6c3cf487
@ -356,6 +356,7 @@ Type
|
|||||||
TCustomJSONRPCHandlerManager = Class(TComponent)
|
TCustomJSONRPCHandlerManager = Class(TComponent)
|
||||||
Private
|
Private
|
||||||
FRegistering: Boolean;
|
FRegistering: Boolean;
|
||||||
|
FHandlerCount : Int64;
|
||||||
Protected
|
Protected
|
||||||
procedure Initialize; virtual;
|
procedure Initialize; virtual;
|
||||||
procedure DoClear; virtual;
|
procedure DoClear; virtual;
|
||||||
@ -1542,7 +1543,7 @@ begin
|
|||||||
If Assigned(FDataModuleClass) then
|
If Assigned(FDataModuleClass) then
|
||||||
begin
|
begin
|
||||||
{$ifdef wmdebug}SendDebug(Format('Creating datamodule from class %d ',[Ord(Assigned(FDataModuleClass))]));{$endif}
|
{$ifdef wmdebug}SendDebug(Format('Creating datamodule from class %d ',[Ord(Assigned(FDataModuleClass))]));{$endif}
|
||||||
DM:=FDataModuleClass.Create(AOwner);
|
DM:=FDataModuleClass.Create(Nil);
|
||||||
{$ifdef wmdebug}SendDebug(Format('Created datamodule from class %s ',[DM.ClassName]));{$endif}
|
{$ifdef wmdebug}SendDebug(Format('Created datamodule from class %s ',[DM.ClassName]));{$endif}
|
||||||
I:=0;
|
I:=0;
|
||||||
While (Result=Nil) and (I<DM.ComponentCount) do
|
While (Result=Nil) and (I<DM.ComponentCount) do
|
||||||
@ -1559,7 +1560,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
DM:=TDataModule.CreateNew(AOwner,0);
|
DM:=TDataModule.CreateNew(Nil,0);
|
||||||
AContainer:=DM;
|
AContainer:=DM;
|
||||||
If (Result=Nil) then
|
If (Result=Nil) then
|
||||||
begin
|
begin
|
||||||
@ -1796,6 +1797,7 @@ Function TCustomJSONRPCHandlerManager.GetHandler(
|
|||||||
): TCustomJSONRPCHandler;
|
): TCustomJSONRPCHandler;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
|
N : String;
|
||||||
O : TComponent;
|
O : TComponent;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -1803,7 +1805,13 @@ begin
|
|||||||
O:=Self
|
O:=Self
|
||||||
else
|
else
|
||||||
O:=AOwner;
|
O:=AOwner;
|
||||||
Result:=ADef.CreateInstance(O,AContainer);
|
Result:=ADef.CreateInstance(Nil,AContainer);
|
||||||
|
N:=aContainer.Name;
|
||||||
|
if N='' then
|
||||||
|
N:=aContainer.ClassName;
|
||||||
|
N:=N+IntToStr(InterlockedIncrement64(FHandlerCount));
|
||||||
|
aContainer.Name:=N;
|
||||||
|
O.InsertComponent(aContainer);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function TCustomJSONRPCHandlerManager.GetHandler(Const AClassName,
|
Function TCustomJSONRPCHandlerManager.GetHandler(Const AClassName,
|
||||||
|
Loading…
Reference in New Issue
Block a user