// uber-ThreadKill catcher, since it should always just mean "be dead"
try {
// Call the thread's code
RubyModule frameClass = proc.getBlock().getFrame().getKlazz();
try {
if (runtime.hasEventHooks() && runtime.is2_0()) context.trace(RubyEvent.THREAD_BEGIN, null, frameClass);
IRubyObject result = proc.call(context, arguments);
if (runtime.hasEventHooks() && runtime.is2_0()) context.trace(RubyEvent.THREAD_END, null, frameClass);
rubyThread.cleanTerminate(result);
} catch (JumpException.ReturnJump rj) {
rubyThread.exceptionRaised(rj.buildException(runtime));