Code Review: Issues with Thread#kill and raising exception from ensure clause

tfpt review “/shelveset:kill;REDMOND\sborde”

Comment :
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.

Are any methods in RubyOps Exceptions #region (including those added by
this shelveset) emitted to IL? If not they should rather be in RubyUtils

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.



This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs