ruby-changes:66463
From: nagachika <ko1@a...>
Date: Sun, 13 Jun 2021 14:08:54 +0900 (JST)
Subject: [ruby-changes:66463] f0a1c06349 (ruby_3_0): merge revision(s) d74e5d5b4fba41a9120b3ed2762cf765478605ad: [Backport #17948]
https://git.ruby-lang.org/ruby.git/commit/?id=f0a1c06349 From f0a1c063490d69f0868876deed74ad52db63cf4b Mon Sep 17 00:00:00 2001 From: nagachika <nagachika@r...> Date: Sun, 13 Jun 2021 14:07:06 +0900 Subject: merge revision(s) d74e5d5b4fba41a9120b3ed2762cf765478605ad: [Backport #17948] Crash more nicely when the VM isn't fully set up If we crash but the VM isn't fully alive, we can get an infinite loop. --- vm_dump.c | 62 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 30 deletions(-) --- version.h | 4 ++-- vm_dump.c | 62 ++++++++++++++++++++++++++++++++------------------------------ 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/version.h b/version.h index 25ba785..35b5225 100644 --- a/version.h +++ b/version.h @@ -12,11 +12,11 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L12 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 2 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 102 +#define RUBY_PATCHLEVEL 103 #define RUBY_RELEASE_YEAR 2021 #define RUBY_RELEASE_MONTH 6 -#define RUBY_RELEASE_DAY 10 +#define RUBY_RELEASE_DAY 13 #include "ruby/version.h" diff --git a/vm_dump.c b/vm_dump.c index 043c07c..5509594 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -1019,36 +1019,38 @@ rb_vm_bugreport(const void *ctx) https://github.com/ruby/ruby/blob/trunk/vm_dump.c#L1019 LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); fprintf(stderr, "\n"); } - fprintf(stderr, "* Loaded features:\n\n"); - for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { - name = RARRAY_AREF(vm->loaded_features, i); - if (RB_TYPE_P(name, T_STRING)) { - fprintf(stderr, " %4d %.*s\n", i, - LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); - } - else if (RB_TYPE_P(name, T_CLASS) || RB_TYPE_P(name, T_MODULE)) { - const char *const type = RB_TYPE_P(name, T_CLASS) ? - "class" : "module"; - name = rb_search_class_path(rb_class_real(name)); - if (!RB_TYPE_P(name, T_STRING)) { - fprintf(stderr, " %4d %s:<unnamed>\n", i, type); - continue; - } - fprintf(stderr, " %4d %s:%.*s\n", i, type, - LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); - } - else { - VALUE klass = rb_search_class_path(rb_obj_class(name)); - if (!RB_TYPE_P(klass, T_STRING)) { - fprintf(stderr, " %4d #<%p:%p>\n", i, - (void *)CLASS_OF(name), (void *)name); - continue; - } - fprintf(stderr, " %4d #<%.*s:%p>\n", i, - LIMITED_NAME_LENGTH(klass), RSTRING_PTR(klass), - (void *)name); - } - } + if (vm->loaded_features) { + fprintf(stderr, "* Loaded features:\n\n"); + for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { + name = RARRAY_AREF(vm->loaded_features, i); + if (RB_TYPE_P(name, T_STRING)) { + fprintf(stderr, " %4d %.*s\n", i, + LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); + } + else if (RB_TYPE_P(name, T_CLASS) || RB_TYPE_P(name, T_MODULE)) { + const char *const type = RB_TYPE_P(name, T_CLASS) ? + "class" : "module"; + name = rb_search_class_path(rb_class_real(name)); + if (!RB_TYPE_P(name, T_STRING)) { + fprintf(stderr, " %4d %s:<unnamed>\n", i, type); + continue; + } + fprintf(stderr, " %4d %s:%.*s\n", i, type, + LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); + } + else { + VALUE klass = rb_search_class_path(rb_obj_class(name)); + if (!RB_TYPE_P(klass, T_STRING)) { + fprintf(stderr, " %4d #<%p:%p>\n", i, + (void *)CLASS_OF(name), (void *)name); + continue; + } + fprintf(stderr, " %4d #<%.*s:%p>\n", i, + LIMITED_NAME_LENGTH(klass), RSTRING_PTR(klass), + (void *)name); + } + } + } fprintf(stderr, "\n"); } -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/