瀏覽代碼

LibTest: Do not cleanly exit when abort() is called

Instead, do the cleanup, remove the signal handler, and abort() again.
Ali Mohammad Pur 4 年之前
父節點
當前提交
13c1514889

+ 6 - 1
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);
 }
 

+ 11 - 1
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)