summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-11-26 20:35:24 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2020-11-26 20:37:47 -0800
commit69e77e81dc10945ac6327717bd480db78004f65a (patch)
tree3366968a32536210345010b90b07f89dbb3430ad /gc.c
parent4dbf6f1e515bd6a3b03ba9edccabccb780c3f789 (diff)
Run rb_print_backtrace first on ruby_on_ci
Unfortunately we couldn't see a C backtrace with the previous commit http://ci.rvm.jp/results/trunk-random2@phosphorus-docker/3272697.
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index 48c14553f8..7fe4f8c609 100644
--- a/gc.c
+++ b/gc.c
@@ -4598,7 +4598,13 @@ static void
read_barrier_signal(int sig, siginfo_t * info, void * data)
{
extern int ruby_on_ci;
- if (ruby_on_ci) { // read_barrier_handler may crash. Report a backtrace first on CI.
+ if (ruby_on_ci) { // `read_barrier_handler` may crash. Report backtraces first on CI.
+# if HAVE_BACKTRACE // `rb_bug_without_die` may crash on `control_frame_dump`. Report a C backtrace first.
+ fprintf(stderr, "-- C level backtrace (read_barrier_signal) "
+ "-------------------------------------------\n");
+ rb_print_backtrace();
+ fprintf(stderr, "\n");
+# endif
extern void rb_bug_without_die(const char *fmt, ...);
rb_bug_without_die("died with read_barrier_signal installed");
}