aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2022-09-03 16:06:33 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2022-09-03 16:06:33 -0500
commita47b5476e1efb5c571f5a032a0b63ac8a2dfae82 (patch)
treefd3e8eba67e120a8cd67db9044c3b13837393ce2 /src
parent102434e4cbb8ed1b4075f99fb999f092fa068d5b (diff)
Add more signals
Diffstat (limited to 'src')
-rw-r--r--src/libmain/shared.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 0ee3fe772..9769c993e 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -181,8 +181,9 @@ void initNix()
/* Reset SIGCHLD to its default. */
struct sigaction act;
sigemptyset(&act.sa_mask);
- act.sa_handler = SIG_DFL;
act.sa_flags = 0;
+
+ act.sa_handler = SIG_DFL;
if (sigaction(SIGCHLD, &act, 0))
throw SysError("resetting SIGCHLD");
@@ -197,13 +198,23 @@ void initNix()
act.sa_handler = sigHandler;
if (sigaction(SIGWINCH, &act, 0)) throw SysError("handling SIGWINCH");
- // Disable SA_RESTART for interrupts, so that system calls on this thread
- // error with EINTR like they do on Linux, and we don’t hang forever.
+ /* Disable SA_RESTART for interrupts, so that system calls on this thread
+ * error with EINTR like they do on Linux.
+ * Most signals on BSD systems default to SA_RESTART on, but Nix
+ * expects EINTR from syscalls to properly exit. */
act.sa_handler = SIG_DFL;
if (sigaction(SIGINT, &act, 0)) throw SysError("handling SIGINT");
if (sigaction(SIGTERM, &act, 0)) throw SysError("handling SIGTERM");
if (sigaction(SIGHUP, &act, 0)) throw SysError("handling SIGHUP");
if (sigaction(SIGPIPE, &act, 0)) throw SysError("handling SIGPIPE");
+ if (sigaction(SIGQUIT, &act, 0)) throw SysError("handling SIGQUIT");
+ if (sigaction(SIGILL, &act, 0)) throw SysError("handling SIGILL");
+ if (sigaction(SIGTRAP, &act, 0)) throw SysError("handling SIGTRAP");
+ if (sigaction(SIGABRT, &act, 0)) throw SysError("handling SIGABRT");
+ if (sigaction(SIGFPE, &act, 0)) throw SysError("handling SIGFPE");
+ if (sigaction(SIGBUS, &act, 0)) throw SysError("handling SIGBUS");
+ if (sigaction(SIGXCPU, &act, 0)) throw SysError("handling SIGXCPU");
+ if (sigaction(SIGXFSZ, &act, 0)) throw SysError("handling SIGXFSZ");
#endif
/* Register a SIGSEGV handler to detect stack overflows. */