dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] pnetlib ChangeLog System.Windows.Forms/Timer.cs


From: Heiko Weiss
Subject: [dotgnu-pnet-commits] pnetlib ChangeLog System.Windows.Forms/Timer.cs
Date: Tue, 18 Jul 2006 05:48:11 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    pnetlib
Changes by:     Heiko Weiss <brubbel>   06/07/18 05:48:11

Modified files:
        .              : ChangeLog 
        System.Windows.Forms: Timer.cs 

Log message:
        fixed a memory leak with Timers.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnetlib/ChangeLog?cvsroot=dotgnu-pnet&r1=1.2430&r2=1.2431
http://cvs.savannah.gnu.org/viewcvs/pnetlib/System.Windows.Forms/Timer.cs?cvsroot=dotgnu-pnet&r1=1.1&r2=1.2

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/pnetlib/ChangeLog,v
retrieving revision 1.2430
retrieving revision 1.2431
diff -u -b -r1.2430 -r1.2431
--- ChangeLog   13 Jul 2006 13:12:32 -0000      1.2430
+++ ChangeLog   18 Jul 2006 05:48:11 -0000      1.2431
@@ -1,3 +1,7 @@
+2006-07-18  Heiko Weiss  <address@hidden>
+
+       * System.Windows.Forms/Timer.cs: fixed a memory leak.
+
 2006-07-13  Heiko Weiss  <address@hidden>
 
        *runtime/System/GC.cs: added a define for tests

Index: System.Windows.Forms/Timer.cs
===================================================================
RCS file: /sources/dotgnu-pnet/pnetlib/System.Windows.Forms/Timer.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- System.Windows.Forms/Timer.cs       23 Jun 2003 05:14:42 -0000      1.1
+++ System.Windows.Forms/Timer.cs       18 Jul 2006 05:48:11 -0000      1.2
@@ -36,7 +36,9 @@
        private bool enabled;
        private int interval;
        private Object timerCookie;
+       private EventHandler onTimer;
 
+       static private EventHandler EvExpire = new EventHandler(Expire);
        // Constructors.
        public Timer()
                        {
@@ -66,25 +68,9 @@
                                }
                                set
                                {
-                                       lock(this)
-                                       {
-                                               if(enabled != value)
-                                               {
+                                       if(enabled != value) {
                                                        enabled = value;
-                                                       if(value)
-                                                       {
-                                                               timerCookie = 
ToolkitManager.Toolkit
-                                                                       
.RegisterTimer
-                                                                               
(this, interval,
-                                                                               
 new EventHandler(Expire));
-                                                       }
-                                                       else
-                                                       {
-                                                               
ToolkitManager.Toolkit.UnregisterTimer
-                                                                       
(timerCookie);
-                                                               timerCookie = 
null;
-                                                       }
-                                               }
+                                               this.CheckTimer();
                                        }
                                }
                        }
@@ -116,6 +102,27 @@
                                }
                        }
 
+       void CheckTimer() {
+               lock(this)
+               {
+                       if( enabled && null != onTimer ) {
+                               if( null == timerCookie ) {
+                                       timerCookie = ToolkitManager.Toolkit
+                                                       .RegisterTimer
+                                                       (this, 
this.interval,EvExpire);
+                               }
+                       }
+                       else {
+                               if( null != timerCookie ) {
+                                       ToolkitManager.Toolkit.UnregisterTimer
+                                                       (timerCookie);
+                                       timerCookie = null;
+                               }
+                       }
+               }
+       }
+
+
        // Start the timer.
        public void Start()
                        {
@@ -135,7 +142,16 @@
                        }
 
        // Event that is emitted when the timer expires.
-       public event EventHandler Tick;
+       public event EventHandler Tick {
+               add  {
+                       this.onTimer = 
(EventHandler)Delegate.Combine(this.onTimer,value);
+                       this.CheckTimer();
+               }
+               remove {
+                       this.onTimer = 
(EventHandler)Delegate.Remove(this.onTimer,value);
+                       this.CheckTimer();
+               }
+       }
 
        // Dispose of the timer.
 #if !CONFIG_COMPONENT_MODEL
@@ -152,19 +168,13 @@
                                Enabled = false;
                        }
 
-       // Raise the "Tick" event.
-       protected virtual void OnTick(EventArgs e)
-                       {
-                               if(Tick != null)
-                               {
-                                       Tick(this, e);
-                               }
-                       }
-
        // Method that is called by the toolkit when the timer expires.
-       private void Expire(Object sender, EventArgs e)
+       static private void Expire(Object sender, EventArgs e)
                        {
-                               OnTick(e);
+                               Timer timer = (Timer) sender;
+                               if( null != timer && null != timer.onTimer ) {
+                                       timer.onTimer(timer,e);
+                               }
                        }
 
 }; // class Timer




reply via email to

[Prev in Thread] Current Thread [Next in Thread]