summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-11-26 20:08:20 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2020-11-26 20:09:57 -0800
commit4dbf6f1e515bd6a3b03ba9edccabccb780c3f789 (patch)
treed4d946ab3de0380997fb06da0039d2341d007f25 /gc.c
parent82541df081393198dd9265ed12d6cc7cc32915a0 (diff)
Call rb_bug_without_die on CI
when GC.compact's SEGV handler is installed
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)