ソースを参照

Merged revisions 12368 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

........
r12368 | andrew | 2008-12-16 04:49:30 +0100 (Tue, 16 Dec 2008) | 2 lines

* fixed huge memory leak when searching chms
........

git-svn-id: branches/fixes_2_2@12421 -

joost 16 年 前
コミット
0298b32cae
1 ファイル変更13 行追加5 行削除
  1. 13 5
      packages/chm/src/chmreader.pas

+ 13 - 5
packages/chm/src/chmreader.pas

@@ -146,7 +146,7 @@ type
     destructor Destroy; override;
     function GetObject(Name: String): TMemoryStream;
     function IsAnOpenFile(AFileName: String): Boolean;
-    function ObjectExists(Name: String; fChm: TChmReader = nil): QWord;
+    function ObjectExists(Name: String; var fChm: TChmReader = nil): QWord;
     //properties
     property Chm[Index: Integer]: TChmReader read GetChm;
     property FileName[Index: Integer]: String read GetFileName;
@@ -844,7 +844,7 @@ begin
   Result := '';
   ATitle := '';
   //WriteLn('Getting topic# ',ATopicID);
-  if fTOPICSStream = nil then;
+  if fTOPICSStream = nil then
     fTOPICSStream := GetObject('/#TOPICS');
   if fTOPICSStream = nil then
     Exit;
@@ -1117,12 +1117,18 @@ end;
 
 function TChmFileList.GetChm(AIndex: Integer): TChmReader;
 begin
-  Result := TChmReader(Objects[AIndex]);
+  if AIndex = -1 then
+    Result := fLastChm
+  else
+    Result := TChmReader(Objects[AIndex]);
 end;
 
 function TChmFileList.GetFileName(AIndex: Integer): String;
 begin
-  Result := Strings[AIndex];
+  if AIndex = -1 then
+    AIndex := IndexOfObject(fLastChm);
+
+   Result := Strings[AIndex];
 end;
 
 procedure TChmFileList.OpenNewFile(AFileName: String);
@@ -1227,7 +1233,7 @@ begin
   fUnNotifiedFiles.Clear;
 end;
 
-function TChmFileList.ObjectExists(Name: String; fChm: TChmReader = nil): QWord;
+function TChmFileList.ObjectExists(Name: String; var fChm: TChmReader = nil): QWord;
 begin
   Result := 0;
   if Count = 0 then exit;
@@ -1240,6 +1246,8 @@ begin
   if Result = 0 then begin
     Result := MetaObjectExists(Name);
   end;
+  if (Result <> 0) and (fChm = nil) then
+    fChm := fLastChm;
 end;
 
 function TChmFileList.GetObject(Name: String): TMemoryStream;