[Mono-devel-list] Leak in System.Timers.Timer?

Brian Kroeker bkroeker at nortel.com
Thu Mar 10 15:07:55 EST 2005


I haven't installed mono on windows but using the MS Framework I don't see
this behavior on windows. Also I don't believe this could be a
lapsed-listener, since I'm subscribing to an event in the instance of timer
- when all references to timer are gone shouldn't the garbage collector get
rid of the object including its event and list of delegates? I didn't think
the delegates stuck around after the event went away.
 
Brian

-----Original Message-----
From: mono-devel-list-admin at lists.ximian.com
[mailto:mono-devel-list-admin at lists.ximian.com] 
Sent: Thursday, March 10, 2005 12:03 PM
To: mono-devel-list at lists.ximian.com
Subject: Re: [Mono-devel-list] Leak in System.Timers.Timer?


Oh, wait I see you are passing the same one by ref and setting it to null.
Do you get different behaviour under windows? 

Joe Audette <joe_audette at yahoo.com> wrote: 

Looks to me like your creating timers in an infinite loop wich would of
course continue to consume resources
 
 while(true) 
    { 
                InitTimeout(ref timeout); 
                System.Threading.Thread.Sleep(10); 
    } 
 
true will always be true so you are spinning off a lot of timers right? Or
am I missing something?
 
Regards,
 
Joe


Brian Kroeker <bkroeker at nortel.com> wrote:

I'm seeing what looks like a memory leak somewhere in System.Timers.Timer.
I'm using mono 1.1.4 on a linux system. The code I used to reproduce the
problem is:

---------------------- 
using System; 


namespace TimerTest 
{ 
    public class TimerTest 
    { 
        static void Main(string[] args) 
        { 
            TimerTest test = new TimerTest(); 

            test.Run(); 
        } 

        public TimerTest() 
        { 
        } 

        public void Run() 
        { 
            System.Timers.Timer timeout = null; 

            while(true) 
            { 
                InitTimeout(ref timeout); 
                System.Threading.Thread.Sleep(10); 
            } 
        } 

        private void InitTimeout(ref System.Timers.Timer timer) 
        { 
            if(timer != null) 
            { 
                timer.Stop(); 
                timer = null; 
            } 

            timer = new System.Timers.Timer(); 
            timer.AutoReset = false; 
            timer.Elapsed += new
System.Timers.ElapsedEventHandler(OnTimeout); 
            timer.Interval = 30000; 
            timer.Start(); 
        } 

        private void OnTimeout(object source, System.Timers.ElapsedEventArgs
e) 
        { 
        } 
    } 
} 
-------------- 

Does anyone else see this problem? Am I missing something here? I see the
memory usage on my system increase fairly quickly.

Thanks, 
Brian 



joe_audette at yahoo.com
http://www.joeaudette.com
http://www.mojoportal.com



joe_audette at yahoo.com
http://www.joeaudette.com
http://www.mojoportal.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20050310/fad1cf97/attachment.html 


More information about the Mono-devel-list mailing list