1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Call rb_bug_without_die on CI

when GC.compact's SEGV handler is installed
This commit is contained in:
Takashi Kokubun 2020-11-26 20:08:20 -08:00
parent 82541df081
commit 4dbf6f1e51
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD
2 changed files with 16 additions and 3 deletions

12
error.c
View file

@ -733,17 +733,25 @@ die(void)
}
void
rb_bug(const char *fmt, ...)
rb_bug_without_die(const char *fmt, ...)
{
const char *file = NULL;
int line = 0;
if (GET_EC()) {
file = rb_source_location_cstr(&line);
file = rb_source_location_cstr(&line);
}
report_bug(file, line, fmt, NULL);
}
void
rb_bug(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
rb_bug_without_die(fmt, args);
va_end(args);
die();
}

7
gc.c
View file

@ -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)