[Ironruby-core] Code Review: Issues with Thread#kill and raising exception from ensure clause
Tomas.Matousek at microsoft.com
Fri Jan 9 19:33:41 EST 2009
Are any methods in RubyOps Exceptions #region (including those added by this shelveset) emitted to IL? If not they should rather be in RubyUtils class.
On the other hand, SourceUnitTree.CheckForAsyncRaiseViaThreadAbortshould should be marked as [Emitted], be in RubyOps.cs and SourceUnitTree.GenerateCheckForAsyncException should use Methods.CheckForAsyncRaiseViaThreadAbort to get the method.
Could we add a public helper that calls thread.Abort(new ThreadExitMarker()); move the private ThreadExitMarker class and IsRubyThreadExit to RubyUtils? Then we won't need to duplicate the marker class in ThreadOps?
Other than that, looks good.
From: Shri Borde
Sent: Friday, January 09, 2009 3:33 PM
To: IronRuby External Code Reviewers
Cc: ironruby-core at rubyforge.org
Subject: Code Review: Issues with Thread#kill and raising exception from ensure clause
tfpt review "/shelveset:kill;REDMOND\sborde"
Added more tests for Thread#kill, and fixed bugs that were exposed. Throwing an exception from the ensure clause exposes new code paths.
Ruby allows Thread#kill to be completely subverted (not just deferred as an infinite loop in an ensure clause would do) by raising an exception from a ensure clause. I have not matched that behavior, and left it as a IronRuby bug for now.
More information about the Ironruby-core