public synchronized void checkMail(ThreadContext context) { ThreadService.Event myEvent = mail; mail = null; if (myEvent != null) { switch (myEvent.type) { case RAISE: receivedAnException(context, myEvent.exception); case KILL: throwThreadKill(); } } }
@JRubyMethod(name = {"kill", "exit", "terminate"}) public IRubyObject kill() { // need to reexamine this RubyThread currentThread = getRuntime().getCurrentContext().getThread(); // If the killee thread is the same as the killer thread, just die if (currentThread == this) throwThreadKill(); debug(this, "trying to kill"); currentThread.pollThreadEvents(); getRuntime() .getThreadService() .deliverEvent(new ThreadService.Event(currentThread, this, ThreadService.Event.Type.KILL)); debug(this, "succeeded with kill"); return this; }