[Ironruby-core] [ruby-core:21290] Re: MRI 1.8.6 bug - exit is ignored if ensure clause throws exception which is caught by outer rescue

Shri Borde Shri.Borde at microsoft.com
Mon Jan 12 17:09:54 EST 2009

OK, I have added a RSpec test, and  have already tagged it as an IronRuby bug.

For reference, .NET allows the equivalent ThreadAbortException to be caught, but automatically rethrows it at the end of the catch/rescue block. The programmer is required to take a separate action (calling Thread.ResetAbort<http://msdn.microsoft.com/en-us/library/system.threading.thread.resetabort.aspx>) to complete cancel the abort operation. This prevents situations where one component triggers the abort, and another cancels it unintentially. In theory, you should always do "rescue SomeSpecificExceptionType", but a lot of people do use just "rescue".

From: Evan Phoenix [mailto:evan at fallingsnow.net]
Sent: Monday, January 12, 2009 1:01 PM
To: ruby-core at ruby-lang.org
Subject: [ruby-core:21290] Re: MRI 1.8.6 bug - exit is ignored if ensure clause throws exception which is caught by outer rescue

On Jan 12, 2009, at 12:31 PM, Shri Borde wrote:

The following code snippet does print "after foo" when using MRI 1.8.6 on Windows Vista, showing that exit is ignored. Any thoughts on whether this is by design, a known bug, or a new issue? If it's the latter, should I open a bug for it?

No, this is by design. Kernel#exit raises SystemExit, which the toplevel rescues and performs the actual exit. If you raise a new exception in the ensure. the SystemExit exception is never seen by the toplevel, and thus you don't get the exit.

This is used in a few places to cause exit to be ignored, or to allow a library to convert a SystemExit exception into something else (perhaps an IllegalOperation or something).

 - Evan Phoenix

def foo
        puts "We never reach here"
      raise "exception from ensure"
    puts "We do reach here, which is unexpected"

print "after foo"


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090112/0669a02f/attachment.html>

More information about the Ironruby-core mailing list