From: <ah...@us...> - 2009-03-21 14:52:24
|
Revision: 12245 http://jvcl.svn.sourceforge.net/jvcl/?rev=12245&view=rev Author: ahuser Date: 2009-03-21 14:52:15 +0000 (Sat, 21 Mar 2009) Log Message: ----------- Mantis #4712: AV in TJvGIFAnimator (threading issue) Modified Paths: -------------- trunk/jvcl/run/JvGIFCtrl.pas Modified: trunk/jvcl/run/JvGIFCtrl.pas =================================================================== --- trunk/jvcl/run/JvGIFCtrl.pas 2009-03-20 23:24:23 UTC (rev 12244) +++ trunk/jvcl/run/JvGIFCtrl.pas 2009-03-21 14:52:15 UTC (rev 12245) @@ -198,7 +198,9 @@ destructor TJvGIFAnimator.Destroy; begin - Destroying; + FTimer.OnTimer := nil; // terminate timer thread + FTimer.Enabled := False; + Destroying; // ??? ahuser: this is the job of TComponent.Destroy, why is it called here? FOnStart := nil; FOnStop := nil; FOnChange := nil; @@ -207,7 +209,7 @@ FCache.Free; FImage.OnChange := nil; FImage.Free; - FTimer.Free; // Note: not really required (VCL does it for us), but cleaner + FreeAndNil(FTimer); // Note: not really required (VCL does it for us), but cleaner inherited Destroy; end; @@ -567,7 +569,7 @@ procedure TJvGIFAnimator.TimerExpired(Sender: TObject); begin - if csPaintCopy in ControlState then + if (csPaintCopy in ControlState) or (csDestroying in ComponentState) then Exit; if Visible and (FImage.Count > 1) and (Parent <> nil) and Parent.HandleAllocated then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |