<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Well, a segfault in voicemail would do the same thing.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Suppose your plugin runs a thread that does something important,
like billing or so on. That thread fails – do you really want it to go on?<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Anyways, the solution is simple enough, handle your exceptions </span><span
style='font-size:11.0pt;font-family:Wingdings;color:#1F497D'>J</span><span
style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>.
Every plugin can decide what it wants to do here.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>-Michael<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
freeswitch-users-bounces@lists.freeswitch.org
[mailto:freeswitch-users-bounces@lists.freeswitch.org] <b>On Behalf Of </b>Josh
Rivers<br>
<b>Sent:</b> Wednesday, September 09, 2009 10:41 PM<br>
<b>To:</b> freeswitch-users@lists.freeswitch.org<br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></span></p>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal style='margin-bottom:12.0pt'>The question is whether the CLR
should take down the whole phone server due to an unhandled
exception...definitely the CLR should terminate...but shouldn't it just log the
exception to the console, not crash the core?<o:p></o:p></p>
<div>
<p class=MsoNormal>On Wed, Sep 9, 2009 at 6:30 PM, Michael Giagnocavo <<a
href="mailto:mgg@giagnocavo.net">mgg@giagnocavo.net</a>> wrote:<o:p></o:p></p>
<div>
<div>
<p><span style='font-size:11.0pt;color:#1F497D'>That’s by design. If a thread
fails, and there’s no handler, then the application could be in a corrupted
state, so the CLR takes down the process.</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>I think there is a .NET 1.0
compat switch you can enable in the config if you like exceptions to be
silently ignored </span><span style='font-size:11.0pt;font-family:Wingdings;
color:#1F497D'>J</span><span style='font-size:11.0pt;color:#1F497D'>.</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>-Michael</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org"
target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a
href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Josh Rivers<br>
<b>Sent:</b> Wednesday, September 09, 2009 6:39 PM</span><o:p></o:p></p>
<div>
<div>
<p class=MsoNormal><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org"
target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></p>
</div>
</div>
</div>
<div>
<div>
<p> <o:p></o:p></p>
<p>I have a new thought on the crashes...I'm able to crash FreeSWITCH any time
I like, just by having an exception in a thread.<o:p></o:p></p>
<div>
<p> <o:p></o:p></p>
<div>
<p> public class CrashFreeSWITCH : ILoadNotificationPlugin<o:p></o:p></p>
</div>
<div>
<p> {<o:p></o:p></p>
</div>
<div>
<p> public bool Load()<o:p></o:p></p>
</div>
<div>
<p> {<o:p></o:p></p>
</div>
<div>
<p>
ThreadPool.QueueUserWorkItem((o) => { throw new
NotImplementedException(); });<o:p></o:p></p>
</div>
<div>
<p> return true;<o:p></o:p></p>
</div>
<div>
<p> }<o:p></o:p></p>
</div>
<div>
<p> }<o:p></o:p></p>
</div>
<div>
<p> <o:p></o:p></p>
</div>
<div>
<p>Perhaps Application.ThreadException
or AppDomain.UnhandledException need to be trapped?<o:p></o:p></p>
</div>
<div>
<p> <o:p></o:p></p>
</div>
<div>
<p>On Wed, Sep 9, 2009 at 4:51 PM, Michael Giagnocavo <<a
href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>> wrote:<o:p></o:p></p>
<div>
<div>
<div>
<p>>Looks like the event object goes straight to pinvokes, so a null result
just crashes?<o:p></o:p></p>
<p> <o:p></o:p></p>
</div>
<p>If it’s null, you should get a NullReferenceException. The C# compiler
should callvirt the property getter and that’ll do a null check. If that isn’t
happening, that’d be an interesting optimization somewhere along the line.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>-Michael <o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org"
target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a
href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Josh Rivers<br>
<b>Sent:</b> Wednesday, September 09, 2009 3:01 PM</span><o:p></o:p></p>
<div>
<p><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org"
target="_blank">freeswitch-users@lists.freeswitch.org</a><o:p></o:p></p>
</div>
<p><b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></p>
</div>
<div>
<div>
<p> <o:p></o:p></p>
<p>A new discovery:<o:p></o:p></p>
<div>
<div>
<p> public bool Load()<o:p></o:p></p>
</div>
<div>
<p> {<o:p></o:p></p>
</div>
<div>
<p>
ThreadPool.QueueUserWorkItem((o) =><o:p></o:p></p>
</div>
<div>
<p> {<o:p></o:p></p>
</div>
<div>
<p>
Log.WriteLine(LogLevel.Notice, "Thread Starting. ");<o:p></o:p></p>
</div>
<div>
<p> EventConsumer
con = new EventConsumer("all", "");<o:p></o:p></p>
</div>
<div>
<p> while (true)<o:p></o:p></p>
</div>
<div>
<p> {<o:p></o:p></p>
</div>
<div>
<p>
Event ev = con.pop(0);<o:p></o:p></p>
</div>
<div>
<p>
if (ev == null) continue;<o:p></o:p></p>
</div>
<div>
<p>
Log.WriteLine(LogLevel.Notice, "Event: " +
ev.serialized_string);<o:p></o:p></p>
</div>
<div>
<p> }<o:p></o:p></p>
</div>
<div>
<p> });<o:p></o:p></p>
</div>
<div>
<p> return true;<o:p></o:p></p>
</div>
<div>
<p> }<o:p></o:p></p>
</div>
<div>
<p>Does not crash. (Adding the null check prevents crash.) The backgrounded loop
runs fine. Looks like the event object goes straight to pinvokes, so a null
result just crashes?<o:p></o:p></p>
</div>
<div>
<p> <o:p></o:p></p>
</div>
<div>
<p>I like the idea of a 'startup-script' for mod_managed. It would also be
excellent if there was an event or message informing the background code
to terminate nicely when the module reloads.<o:p></o:p></p>
</div>
<div>
<p> <o:p></o:p></p>
</div>
<div>
<p>--Josh<o:p></o:p></p>
</div>
<p> <o:p></o:p></p>
<div>
<p>On Wed, Sep 9, 2009 at 12:57 PM, Jeff Lenk <<a
href="mailto:jlenk@frontiernet.net" target="_blank">jlenk@frontiernet.net</a>>
wrote:<o:p></o:p></p>
<p><br>
I think the problem here is that the loader only keeps this method in scope<br>
until completion then it drops the remoted connection. Therefore you should<br>
not use threads in this method. Michael please correct me if I am wrong<br>
here.<br>
<br>
As an example of the failure simply just put a Sleep(10000) call in the<br>
thread and you will see the failure.<br>
<br>
As Michael said this method was only designed to allow the option to opt out<br>
of being loaded.<br>
<br>
In order to support this perhaps a configuration flag simular to the lua<br>
"startup-script" should be added.<o:p></o:p></p>
<div>
<p style='margin-bottom:12.0pt'><br>
<br>
<br>
Here is the error I get with the loop I mentioned. -Josh<br>
[image: Capture.PNG]<br>
<br>
On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo<br>
<<a href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>>wrote:<br>
<br>
> Hi,<br>
><br>
><br>
><br>
> Can you please
elaborate on the crash you receive when you<br>
> queue a thread during load?<br>
><br>
><br>
><br>
> Thanks,<br>
><br>
> Michael<br>
><br>
><o:p></o:p></p>
</div>
<p><span style='color:#888888'>--<br>
View this message in context: <a
href="http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html"
target="_blank">http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html</a><br>
Sent from the freeswitch-users mailing list archive at Nabble.com.</span><o:p></o:p></p>
<div>
<div>
<p><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>
</div>
</div>
</div>
<p> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
<p style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>
</div>
<p> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>
</div>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</body>
</html>