On Mar 14, 2011, at 10:35 AM, Morgan Schweers wrote:

> Greetings,
> 
> On Mon, Mar 14, 2011 at 6:57 AM, Matt Massicotte <[email protected]> wrote:
> If you find this exception-shifting behavior troubling, please open a ticket.
> 
> What bugs me about the behavior in this case is that if the exact same 
> operation is done on the main thread, it throws a very nice, normal Ruby 
> exception trace, and I know immediately what boneheaded move I made. :)  If 
> it happens on an NSThread, it gives an absolutely opaque 'SIGABRT' on the 
> main thread.
> 
> I'll see if I can create a simple example that demonstrates it.

That would be great.  This behavior is not macruby-specific, but bites anyone 
that sees exceptions on non-main threads.

> 
> Could you explain why introducing the begin/rescue pair that is good 
> programming practice?
> 
> Historically I've found that when I have a consumer thread that does 'work', 
> I don't want an unanticipated failure of any one work unit to prevent future 
> work units from being processed.  So at the top level of any thread action 
> (in this case, in the method triggered on NSTimer firing) I wrap the 
> work-processing code in a rescue block, so if an unexpected failure happens, 
> I log it, and move on to the next work unit.  In some (most?) systems an 
> uncaught exception will kill off the thread, and apparently something similar 
> is true in MacRuby.

Ah.  Yes, in the special-case of executing work that has zero side-effects on 
the rest of your system, this can be helpful.

> 
> Matt
> 
> Hope that helps.
> 
> --  Morgan Schweers
> 
> On Mar 13, 2011, at 6:31 PM, Morgan Schweers wrote:
> 
>> Greetings,
>> Today I Learned :) if a thread throws an exception that isn't rescued by the 
>> top of the thread, it'll crash the app's main thread with 'Program received 
>> signal:  “SIGABRT”.'
>> 
>> That's been plaguing me since I started doing MacRuby development; every 
>> time I tried to start up multiple threads, the app became incredibly fragile 
>> and, unlike the main thread, it wouldn't show ruby traces.
>> 
>> Now I just wrap threads in begin/rescue blocks, and I'm all good.  Good 
>> programming practice anyway, but the failure mode is unobvious if you don't.
>> 
>> Hopefully this helps someone else!
>> 
>> --  Morgan
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> [email protected]
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> 
> _______________________________________________
> MacRuby-devel mailing list
> [email protected]
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> 
> _______________________________________________
> MacRuby-devel mailing list
> [email protected]
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to