1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* vm.c (vm_backtrace_each): get rid of use of malloc from signal

handler by using ruby_engine_name.  [ruby-core:29497]

* vm_eval.c (print_backtrace): file may be nil when segfaulted in
  very early stage.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2010-04-15 05:38:07 +00:00
parent 073515a649
commit 584829aa81
4 changed files with 22 additions and 4 deletions

View file

@ -1,3 +1,11 @@
Thu Apr 15 14:38:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm.c (vm_backtrace_each): get rid of use of malloc from signal
handler by using ruby_engine_name. [ruby-core:29497]
* vm_eval.c (print_backtrace): file may be nil when segfaulted in
very early stage.
Thu Apr 15 11:51:49 2010 NAKAMURA Usaku <usa@ruby-lang.org> Thu Apr 15 11:51:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
* common.mk (help): small fix. * common.mk (help): small fix.

View file

@ -57,6 +57,7 @@ const int ruby_patchlevel = RUBY_PATCHLEVEL;
const char ruby_description[] = RUBY_DESCRIPTION; const char ruby_description[] = RUBY_DESCRIPTION;
const char ruby_copyright[] = RUBY_COPYRIGHT; const char ruby_copyright[] = RUBY_COPYRIGHT;
const char ruby_engine[] = "ruby"; const char ruby_engine[] = "ruby";
VALUE ruby_engine_name = Qnil;
const char ruby_initial_load_paths[] = const char ruby_initial_load_paths[] =
#ifndef NO_INITIAL_LOAD_PATH #ifndef NO_INITIAL_LOAD_PATH
@ -95,7 +96,7 @@ Init_version(void)
rb_define_global_const("RUBY_REVISION", INT2FIX(RUBY_REVISION)); rb_define_global_const("RUBY_REVISION", INT2FIX(RUBY_REVISION));
rb_define_global_const("RUBY_DESCRIPTION", MKSTR(description)); rb_define_global_const("RUBY_DESCRIPTION", MKSTR(description));
rb_define_global_const("RUBY_COPYRIGHT", MKSTR(copyright)); rb_define_global_const("RUBY_COPYRIGHT", MKSTR(copyright));
rb_define_global_const("RUBY_ENGINE", MKSTR(engine)); rb_define_global_const("RUBY_ENGINE", ruby_engine_name = MKSTR(engine));
} }
void void

3
vm.c
View file

@ -732,8 +732,9 @@ vm_backtrace_each(rb_thread_t *th, int lev, rb_backtrace_iter_func *iter, void *
} }
else if (RUBYVM_CFUNC_FRAME_P(cfp)) { else if (RUBYVM_CFUNC_FRAME_P(cfp)) {
ID id; ID id;
extern VALUE ruby_engine_name;
if (NIL_P(file)) file = rb_str_new_cstr("ruby"); if (NIL_P(file)) file = ruby_engine_name;
if (cfp->me->def) if (cfp->me->def)
id = cfp->me->def->original_id; id = cfp->me->def->original_id;
else else

View file

@ -1573,8 +1573,16 @@ rb_f_caller(int argc, VALUE *argv)
static int static int
print_backtrace(void *arg, VALUE file, int line, VALUE method) print_backtrace(void *arg, VALUE file, int line, VALUE method)
{ {
fprintf((FILE *)arg, "\tfrom %s:%d:in `%s'\n", FILE *fp = arg;
RSTRING_PTR(file), line, RSTRING_PTR(method)); const char *filename = NIL_P(file) ? "ruby" : RSTRING_PTR(file);
if (NIL_P(method)) {
fprintf(fp, "\tfrom %s:%d:in unknown method\n",
filename, line);
}
else {
fprintf(fp, "\tfrom %s:%d:in `%s'\n",
filename, line, RSTRING_PTR(method));
}
return FALSE; return FALSE;
} }