aboutsummaryrefslogtreecommitdiff
path: root/core/testing/signal_handler_libc.odin
diff options
context:
space:
mode:
Diffstat (limited to 'core/testing/signal_handler_libc.odin')
-rw-r--r--core/testing/signal_handler_libc.odin9
1 files changed, 8 insertions, 1 deletions
diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin
index d76fdd66b..0ab34776e 100644
--- a/core/testing/signal_handler_libc.odin
+++ b/core/testing/signal_handler_libc.odin
@@ -6,6 +6,7 @@ import "base:intrinsics"
import "core:c/libc"
import "core:encoding/ansi"
import "core:sync"
+import "core:os"
@require import "core:sys/unix"
@(private="file") stop_runner_flag: libc.sig_atomic_t
@@ -20,7 +21,13 @@ local_test_index: libc.sig_atomic_t
@(private="file")
stop_runner_callback :: proc "c" (sig: libc.int) {
- intrinsics.atomic_store(&stop_runner_flag, 1)
+ prev := intrinsics.atomic_add(&stop_runner_flag, 1)
+
+ // If the flag was already set (if this is the second signal sent for example),
+ // consider this a forced (not graceful) exit.
+ if prev > 0 {
+ os.exit(int(sig))
+ }
}
@(private="file")