mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 09:50:09 +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);
|
||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||
EnterCriticalsection(FLock);
|
||||
try
|
||||
{$endif}
|
||||
Result := Copy(FTypesList, 0, FTypeCount);
|
||||
Result := Copy(FTypesList, 0, FTypeCount);
|
||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||
LeaveCriticalsection(FLock);
|
||||
finally
|
||||
LeaveCriticalsection(FLock);
|
||||
end;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
@ -634,38 +637,41 @@ begin
|
||||
Exit(Nil);
|
||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||
EnterCriticalsection(FLock);
|
||||
try
|
||||
{$endif}
|
||||
Result := Nil;
|
||||
for i := 0 to FTypeCount - 1 do
|
||||
begin
|
||||
if FTypesList[i].FTypeInfo = ATypeInfo then
|
||||
begin
|
||||
Result := FTypesList[i];
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
if not Assigned(Result) then
|
||||
begin
|
||||
if FTypeCount = Length(FTypesList) then
|
||||
begin
|
||||
SetLength(FTypesList, FTypeCount * 2);
|
||||
end;
|
||||
case ATypeInfo^.Kind of
|
||||
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
||||
tkSString,
|
||||
tkLString,
|
||||
tkAString,
|
||||
tkUString,
|
||||
tkWString : Result := TRttiStringType.Create(ATypeInfo);
|
||||
tkFloat : Result := TRttiFloatType.Create(ATypeInfo);
|
||||
else
|
||||
Result := TRttiType.Create(ATypeInfo);
|
||||
Result := Nil;
|
||||
for i := 0 to FTypeCount - 1 do
|
||||
begin
|
||||
if FTypesList[i].FTypeInfo = ATypeInfo then
|
||||
begin
|
||||
Result := FTypesList[i];
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
if not Assigned(Result) then
|
||||
begin
|
||||
if FTypeCount = Length(FTypesList) then
|
||||
begin
|
||||
SetLength(FTypesList, FTypeCount * 2);
|
||||
end;
|
||||
case ATypeInfo^.Kind of
|
||||
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
||||
tkSString,
|
||||
tkLString,
|
||||
tkAString,
|
||||
tkUString,
|
||||
tkWString : Result := TRttiStringType.Create(ATypeInfo);
|
||||
tkFloat : Result := TRttiFloatType.Create(ATypeInfo);
|
||||
else
|
||||
Result := TRttiType.Create(ATypeInfo);
|
||||
end;
|
||||
FTypesList[FTypeCount] := Result;
|
||||
Inc(FTypeCount);
|
||||
end;
|
||||
FTypesList[FTypeCount] := Result;
|
||||
Inc(FTypeCount);
|
||||
end;
|
||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||
LeaveCriticalsection(FLock);
|
||||
finally
|
||||
LeaveCriticalsection(FLock);
|
||||
end;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user