diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-01-31 16:16:49 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-01-31 16:16:49 -0500 |
commit | 1a22e9f3c62fb248725874b64b8953392c004bca (patch) | |
tree | 032a7355a4cfa035e846065ee805ea03add3cfa1 | |
parent | e700c9df7679b7a4e5da0e8886ff22a4177f4bca (diff) |
catch signals raised during quick_exit()
-rw-r--r-- | src/signal/__signal_handler.c | 5 | ||||
-rw-r--r-- | src/signal/raise.c | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/signal/__signal_handler.c b/src/signal/__signal_handler.c index 9cd9eda7..0c0fd719 100644 --- a/src/signal/__signal_handler.c +++ b/src/signal/__signal_handler.c @@ -1,9 +1,14 @@ #include <stddef.h> #include "_signal.h" +#include "stdlib/_stdlib.h" #include "_safety.h" void __signal_handler(int sig) { + if (__stdlib.exit_called == QUICK) { + __undefined("signal %d occured during quick_exit", sig); + } + ___signal.current = sig; if (___signal.handlers[sig] != NULL) { ___signal.handlers[sig](sig); diff --git a/src/signal/raise.c b/src/signal/raise.c index 1a8732ef..bb2391df 100644 --- a/src/signal/raise.c +++ b/src/signal/raise.c @@ -4,6 +4,7 @@ #endif #include <signal.h> +#include "stdlib/_stdlib.h" #ifdef POSIX_FORCED #include "_syscall.h" @@ -18,6 +19,9 @@ int raise(int sig) { SIGNAL_SAFE(0); + if (__stdlib.exit_called == QUICK) { + __undefined("raise() called during quick_exit()"); + } /* RETURN_FAILURE(NONZERO); RETURN_SUCCESS(0); |