I just looked at your code, and it's really simple to fix :)
In your tProc routine, add another ec.bind("SHUTDOWN",String.Empty) so that you get the shutdown events. Then in your while loop, if the event is "SHUTDOWN", then set the _stop = true. Also you can get rid of the "_bind" list cause you're not using it...
You also can get rid of implmenting IDisposable yourself, since mod_managed does not Dispose() for you. As long as you exit your thread loop when you get the "SHUTDOWN" event, you should be fine.
Also since you are implmenting an API interface, you may want to do something like:
if(context.args.ToLower() == "shutdown")
_stop = true;
So you can force it to shutdown, and then you can replace the DLL to load a new version while FS is still running.
--Dave
From: Rafal Gwizdala [mailto:rafal.gwizdala@gmail.com]
To: FreeSWITCH Users Help [mailto:freeswitch-users@lists.freeswitch.org]
Sent: Sat, 21 Sep 2013 00:11:41 -0700
Subject: Re: [Freeswitch-users] mod_managed - beginner's question about an event listener module
Dave, there must be something else. I did as you suggested, but my module will hang during shutdown.
The program hangs on EventConsumer.Dispose.
FreeSWITCH Version 1.5.6b+git~20130912T164754Z~d9216daedb (git d9216da 2013-09-12 16:47:54Z)
windows 7 64 bit
but
if the EventConsumer is disposed before system shutdown (for example, after consuming a certain number of events), there is no problem, event receiver thread terminates correctly and system shuts down cleanly.
I think i can live with that. Thanks for your help.
R