summaryrefslogtreecommitdiffstats
path: root/vm_eval.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-14 05:59:23 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-14 05:59:23 +0000
commitfb527263c1743804321fc636c0a229efdf441118 (patch)
tree438b47a99a569e357944ccbf0cc072b3213cad18 /vm_eval.c
parent7f80e833f34a68deca06d5044dd03315d200b2b9 (diff)
downloadruby-fb527263c1743804321fc636c0a229efdf441118.tar.gz
ruby-fb527263c1743804321fc636c0a229efdf441118.tar.xz
ruby-fb527263c1743804321fc636c0a229efdf441118.zip
* thread.c, vm_eval.c: add Thread.backtrace.
* test/ruby/test_thread.rb: add a test. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/vm_eval.c b/vm_eval.c
index 596701e2c..2dff373e4 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -1348,6 +1348,25 @@ rb_make_backtrace(void)
}
VALUE
+rb_thread_backtrace(VALUE thval)
+{
+ rb_thread_t *th;
+ GetThreadPtr(thval, th);
+
+ switch (th->status) {
+ case THREAD_RUNNABLE:
+ case THREAD_STOPPED:
+ case THREAD_STOPPED_FOREVER:
+ break;
+ case THREAD_TO_KILL:
+ case THREAD_KILLED:
+ return Qnil;
+ }
+
+ return vm_backtrace(th, 0);
+}
+
+VALUE
rb_backtrace_each(rb_backtrace_iter_func *iter, void *arg)
{
return vm_backtrace_each(GET_THREAD(), -1, iter, arg);