* ensure that FLock is released in case of an exception

git-svn-id: trunk@37385 -
This commit is contained in:
svenbarth 2017-10-02 18:51:52 +00:00
parent 1bf758c997
commit 794eb7c122

View File

@ -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;