From 13c15148897afee146cb1e200056409fed0b67c3 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Wed, 26 May 2021 23:03:58 +0430 Subject: [PATCH] LibTest: Do not cleanly exit when abort() is called Instead, do the cleanup, remove the signal handler, and abort() again. --- Userland/Libraries/LibTest/JavaScriptTestRunner.h | 7 ++++++- .../Libraries/LibTest/JavaScriptTestRunnerMain.cpp | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibTest/JavaScriptTestRunner.h b/Userland/Libraries/LibTest/JavaScriptTestRunner.h index 62f5d681438..07fcf31f96f 100644 --- a/Userland/Libraries/LibTest/JavaScriptTestRunner.h +++ b/Userland/Libraries/LibTest/JavaScriptTestRunner.h @@ -181,11 +181,16 @@ inline void TestRunnerGlobalObject::initialize_global_object() } } -inline void cleanup_and_exit() +inline void cleanup() { // Clear the taskbar progress. if (TestRunner::the() && TestRunner::the()->is_printing_progress()) warn("\033]9;-1;\033\\"); +} + +inline void cleanup_and_exit() +{ + cleanup(); exit(1); } diff --git a/Userland/Libraries/LibTest/JavaScriptTestRunnerMain.cpp b/Userland/Libraries/LibTest/JavaScriptTestRunnerMain.cpp index 5e9889d4ca0..64d3c19e0bf 100644 --- a/Userland/Libraries/LibTest/JavaScriptTestRunnerMain.cpp +++ b/Userland/Libraries/LibTest/JavaScriptTestRunnerMain.cpp @@ -32,7 +32,17 @@ static StringView g_program_name { "test-js"sv }; static void handle_sigabrt(int) { dbgln("{}: SIGABRT received, cleaning up.", g_program_name); - cleanup_and_exit(); + cleanup(); + struct sigaction act; + memset(&act, 0, sizeof(act)); + act.sa_flags = SA_NOCLDWAIT; + act.sa_handler = SIG_DFL; + int rc = sigaction(SIGABRT, &act, nullptr); + if (rc < 0) { + perror("sigaction"); + exit(1); + } + abort(); } int main(int argc, char** argv)