mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 23:29:13 +02:00
* ensure that FLock is released in case of an exception
git-svn-id: trunk@37385 -
This commit is contained in:
parent
1bf758c997
commit
794eb7c122
@ -619,10 +619,13 @@ begin
|
|||||||
Exit(Nil);
|
Exit(Nil);
|
||||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||||
EnterCriticalsection(FLock);
|
EnterCriticalsection(FLock);
|
||||||
|
try
|
||||||
{$endif}
|
{$endif}
|
||||||
Result := Copy(FTypesList, 0, FTypeCount);
|
Result := Copy(FTypesList, 0, FTypeCount);
|
||||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||||
LeaveCriticalsection(FLock);
|
finally
|
||||||
|
LeaveCriticalsection(FLock);
|
||||||
|
end;
|
||||||
{$endif}
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -634,38 +637,41 @@ begin
|
|||||||
Exit(Nil);
|
Exit(Nil);
|
||||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||||
EnterCriticalsection(FLock);
|
EnterCriticalsection(FLock);
|
||||||
|
try
|
||||||
{$endif}
|
{$endif}
|
||||||
Result := Nil;
|
Result := Nil;
|
||||||
for i := 0 to FTypeCount - 1 do
|
for i := 0 to FTypeCount - 1 do
|
||||||
begin
|
begin
|
||||||
if FTypesList[i].FTypeInfo = ATypeInfo then
|
if FTypesList[i].FTypeInfo = ATypeInfo then
|
||||||
begin
|
begin
|
||||||
Result := FTypesList[i];
|
Result := FTypesList[i];
|
||||||
Break;
|
Break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if not Assigned(Result) then
|
if not Assigned(Result) then
|
||||||
begin
|
begin
|
||||||
if FTypeCount = Length(FTypesList) then
|
if FTypeCount = Length(FTypesList) then
|
||||||
begin
|
begin
|
||||||
SetLength(FTypesList, FTypeCount * 2);
|
SetLength(FTypesList, FTypeCount * 2);
|
||||||
end;
|
end;
|
||||||
case ATypeInfo^.Kind of
|
case ATypeInfo^.Kind of
|
||||||
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
||||||
tkSString,
|
tkSString,
|
||||||
tkLString,
|
tkLString,
|
||||||
tkAString,
|
tkAString,
|
||||||
tkUString,
|
tkUString,
|
||||||
tkWString : Result := TRttiStringType.Create(ATypeInfo);
|
tkWString : Result := TRttiStringType.Create(ATypeInfo);
|
||||||
tkFloat : Result := TRttiFloatType.Create(ATypeInfo);
|
tkFloat : Result := TRttiFloatType.Create(ATypeInfo);
|
||||||
else
|
else
|
||||||
Result := TRttiType.Create(ATypeInfo);
|
Result := TRttiType.Create(ATypeInfo);
|
||||||
|
end;
|
||||||
|
FTypesList[FTypeCount] := Result;
|
||||||
|
Inc(FTypeCount);
|
||||||
end;
|
end;
|
||||||
FTypesList[FTypeCount] := Result;
|
|
||||||
Inc(FTypeCount);
|
|
||||||
end;
|
|
||||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||||
LeaveCriticalsection(FLock);
|
finally
|
||||||
|
LeaveCriticalsection(FLock);
|
||||||
|
end;
|
||||||
{$endif}
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user