OSDN Git Service

ItemDownload関係のメモリリークの解消
authorh677 <h677>
Wed, 31 Mar 2004 08:57:08 +0000 (08:57 +0000)
committerh677 <h677>
Wed, 31 Mar 2004 08:57:08 +0000 (08:57 +0000)
Giko.pas
ItemDownload.pas
ThreadControl.pas

index eaa698b..b5d4f0a 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -1746,6 +1746,8 @@ begin
 
        try
                FControlThread.Terminate;
+        FControlThread.WaitFor;
+        FControlThread.Free;
        except
        end;
 
index de21ff2..050969a 100644 (file)
@@ -58,7 +58,7 @@ type
                property Item: TDownloadItem read FItem write FItem;
                property Number: Integer read FNumber write FNumber;
                constructor Create(CreateSuspended: Boolean);
-               destructor Destroy; override;
+        destructor Destroy; override;
                procedure Abort;
                property OnWork: TGikoWorkEvent read FOnWork write FOnWork;
                property OnWorkBegin: TGikoWorkBeginEvent read FOnWorkBegin write FOnWorkBegin;
@@ -109,6 +109,14 @@ end;
 
 destructor TDownloadThread.Destroy;
 begin
+    FIndy.Request.CustomHeaders.Clear;
+    FIndy.Request.RawHeaders.Clear;
+    FIndy.Request.Clear;
+    FIndy.Response.CustomHeaders.Clear;
+    FIndy.Response.RawHeaders.Clear;
+    FIndy.Response.Clear;
+    FIndy.ProxyParams.Clear;
+
        FIndy.Free;
        inherited;
 end;
@@ -563,6 +571,15 @@ begin
                                Synchronize(FireDownloadEnd);
                        ResStream.Free;
                end;
+
+               FIndy.Request.CustomHeaders.Clear;
+        FIndy.Request.RawHeaders.Clear;
+        FIndy.Request.Clear;
+        FIndy.Response.CustomHeaders.Clear;
+        FIndy.Response.RawHeaders.Clear;
+               FIndy.Response.Clear;
+           FIndy.ProxyParams.Clear;
+
                if Terminated then Break;
                Suspend;
        end;
index 83f3152..609681d 100644 (file)
@@ -56,8 +56,9 @@ destructor TThreadControl.Destroy;
 var
        i: Integer;
 begin
-       for i := 0 to FThreadList.Count - 1 do begin
-               TDownloadThread(FThreadList[i]).Free;
+    FThreadList.Pack;
+       for i := FThreadList.Count - 1 downto 0 do begin
+       TDownloadThread(FThreadList[i]).Free;
        end;
     FThreadList.Capacity := FThreadList.Count;
        FThreadList.Free;
@@ -78,7 +79,7 @@ var
        FDownThread: TDownloadThread;
 begin
        while not Terminated do begin
-               Sleep(10);
+               //Sleep(10);
                List := FItemList.LockList;
                try
                        if List.Count > 0 then begin
@@ -105,6 +106,7 @@ begin
                        end;
                        FAbort := False;
                end;
+        Application.ProcessMessages;
        end;
        for i := 0 to FThreadList.Count - 1 do begin
                TDownloadThread(FThreadList[i]).Terminate;