/* * call-seq: * thr.status => string, false or nil * * Returns the status of <i>thr</i>: ``<code>sleep</code>'' if <i>thr</i> is * sleeping or waiting on I/O, ``<code>run</code>'' if <i>thr</i> is executing, * ``<code>aborting</code>'' if <i>thr</i> is aborting, <code>false</code> if * <i>thr</i> terminated normally, and <code>nil</code> if <i>thr</i> * terminated with an exception. * * a = Thread.new { raise("die now") } * b = Thread.new { Thread.stop } * c = Thread.new { Thread.exit } * d = Thread.new { sleep } * Thread.critical = true * d.kill #=> #<Thread:0x401b3678 aborting> * a.status #=> nil * b.status #=> "sleep" * c.status #=> false * d.status #=> "aborting" * Thread.current.status #=> "run" */ static VALUE rb_thread_status_name(thread) VALUE thread; { rb_thread_t th = rb_thread_check(thread); if (rb_thread_dead(th)) { if (!NIL_P(th->errinfo) && (th->flags & RAISED_EXCEPTION)) return Qnil; return Qfalse; } return rb_str_new2(thread_status_name(th->status)); }