diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-06-14 05:59:23 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-06-14 05:59:23 +0000 |
commit | 63bd8a74e81537ecf2aba0be0f8ef6eec9df2758 (patch) | |
tree | 438b47a99a569e357944ccbf0cc072b3213cad18 /vm_eval.c | |
parent | d3027870eeebed365979875858159d98e0f1effa (diff) | |
download | ruby-63bd8a74e81537ecf2aba0be0f8ef6eec9df2758.tar.gz |
* thread.c, vm_eval.c: add Thread.backtrace.
* test/ruby/test_thread.rb: add a test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r-- | vm_eval.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -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); |