diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-20 16:26:58 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-20 16:26:58 +0000 |
commit | 1b99a27b11b816e20a8cf86d5ee09098f4eba965 (patch) | |
tree | 6746b56b1305437af4fa3db08b2c9eb88a397a18 /vm.c | |
parent | 69286031afc1c4108f3013ed0796ec471de5d963 (diff) | |
download | ruby-1b99a27b11b816e20a8cf86d5ee09098f4eba965.tar.gz |
* vm.c (vm_backtrace_each): use called_id when method definition
structure is already freed. [ruby-dev:40234] [ruby-core:27959]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -731,8 +731,14 @@ vm_backtrace_each(rb_thread_t *th, int lev, rb_backtrace_iter_func *iter, void * } } else if (RUBYVM_CFUNC_FRAME_P(cfp)) { + ID id; + if (NIL_P(file)) file = rb_str_new_cstr("ruby"); - if ((*iter)(arg, file, line_no, rb_id2str(cfp->me->def->original_id))) break; + if (cfp->me->def) + id = cfp->me->def->original_id; + else + id = cfp->me->called_id; + if ((*iter)(arg, file, line_no, rb_id2str(id))) break; } cfp = RUBY_VM_NEXT_CONTROL_FRAME(cfp); } |