summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index 195a753823..48c14553f8 100644
--- a/gc.c
+++ b/gc.c
@@ -4597,7 +4597,12 @@ static struct sigaction old_sigsegv_handler;
static void
read_barrier_signal(int sig, siginfo_t * info, void * data)
{
- read_barrier_handler((intptr_t)info->si_addr);
+ extern int ruby_on_ci;
+ if (ruby_on_ci) { // read_barrier_handler may crash. Report a backtrace first on CI.
+ extern void rb_bug_without_die(const char *fmt, ...);
+ rb_bug_without_die("died with read_barrier_signal installed");
+ }
+ read_barrier_handler((intptr_t)info->si_addr);
}
static void uninstall_handlers(void)