/* * call-seq: * thr.exit => thr or nil * thr.kill => thr or nil * thr.terminate => thr or nil * * Terminates <i>thr</i> and schedules another thread to be run. If this thread * is already marked to be killed, <code>exit</code> returns the * <code>Thread</code>. If this is the main thread, or the last thread, exits * the process. */ VALUE rb_thread_kill(thread) VALUE thread; { rb_thread_t th = rb_thread_check(thread); if (th != curr_thread && th->safe < 4) { rb_secure(4); } if (th->status == THREAD_TO_KILL || th->status == THREAD_KILLED) return thread; if (th == th->next || th == main_thread) rb_exit(EXIT_SUCCESS); rb_thread_ready(th); th->status = THREAD_TO_KILL; if (!rb_thread_critical) rb_thread_schedule(); return thread; }