Browse Source

* fixed huge memory leak when searching chms

git-svn-id: trunk@12368 -
andrew 16 years ago
parent
commit
26b0b7c0ab
1 changed files with 13 additions and 5 deletions
  1. 13 5
      packages/chm/src/chmreader.pas

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

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