testing: Trigger a crash more reliably when panicking and hard fail is active (#32947)

Before when handling panics and hard-fail was activated, Servo would
just exit with an error return code. This isn't interpreted as a crash
by the WPT test runner. This change raises a SEGV signal instead, which
means that panics should more reliably be treated as crashes.

This doesn't seem to change any test results, at least any non-flaky
test results. It is necessary for the test in #32782 to work though.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2024-08-06 19:43:06 +02:00 committed by GitHub
parent 89d20fc401
commit c9fbe018f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 18 deletions

View file

@ -9,6 +9,8 @@ use std::{env, thread};
use log::{error, warn};
use servo::config::opts;
use crate::crash_handler::raise_signal_or_exit_with_error;
pub(crate) fn panic_hook(info: &PanicInfo) {
warn!("Panic hook called.");
let msg = match info.payload().downcast_ref::<&'static str>() {
@ -40,7 +42,9 @@ pub(crate) fn panic_hook(info: &PanicInfo) {
drop(stderr);
if opts::get().hard_fail && !opts::get().multiprocess {
std::process::exit(1);
// When we are exiting due to a hard-failure mode, we trigger a segfault so that crash
// tests detect that we crashed. If we exit normally it just looks like a non-crash exit.
raise_signal_or_exit_with_error(libc::SIGSEGV);
}
error!("{}", msg);