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:
parent
073515a649
commit
584829aa81
4 changed files with 22 additions and 4 deletions
|
@ -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.
|
||||||
|
|
|
@ -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
3
vm.c
|
@ -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
|
||||||
|
|
12
vm_eval.c
12
vm_eval.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue