* On startup, set the default SIGCHLD handler. This is so that Nix
works correctly in weird environments where the SIGCHLD handler is set to "ignore".
This commit is contained in:
parent
ef92a14bfe
commit
f0c0277970
1 changed files with 11 additions and 5 deletions
|
@ -143,23 +143,29 @@ static void initAndRun(int argc, char * * argv)
|
||||||
maxSilentTime = queryIntSetting("build-max-silent-time", 0);
|
maxSilentTime = queryIntSetting("build-max-silent-time", 0);
|
||||||
|
|
||||||
/* Catch SIGINT. */
|
/* Catch SIGINT. */
|
||||||
struct sigaction act, oact;
|
struct sigaction act;
|
||||||
act.sa_handler = sigintHandler;
|
act.sa_handler = sigintHandler;
|
||||||
sigfillset(&act.sa_mask);
|
sigfillset(&act.sa_mask);
|
||||||
act.sa_flags = 0;
|
act.sa_flags = 0;
|
||||||
if (sigaction(SIGINT, &act, &oact))
|
if (sigaction(SIGINT, &act, 0))
|
||||||
throw SysError("installing handler for SIGINT");
|
throw SysError("installing handler for SIGINT");
|
||||||
if (sigaction(SIGTERM, &act, &oact))
|
if (sigaction(SIGTERM, &act, 0))
|
||||||
throw SysError("installing handler for SIGTERM");
|
throw SysError("installing handler for SIGTERM");
|
||||||
if (sigaction(SIGHUP, &act, &oact))
|
if (sigaction(SIGHUP, &act, 0))
|
||||||
throw SysError("installing handler for SIGHUP");
|
throw SysError("installing handler for SIGHUP");
|
||||||
|
|
||||||
/* Ignore SIGPIPE. */
|
/* Ignore SIGPIPE. */
|
||||||
act.sa_handler = SIG_IGN;
|
act.sa_handler = SIG_IGN;
|
||||||
act.sa_flags = 0;
|
act.sa_flags = 0;
|
||||||
if (sigaction(SIGPIPE, &act, &oact))
|
if (sigaction(SIGPIPE, &act, 0))
|
||||||
throw SysError("ignoring SIGPIPE");
|
throw SysError("ignoring SIGPIPE");
|
||||||
|
|
||||||
|
/* Reset SIGCHLD to its default. */
|
||||||
|
act.sa_handler = SIG_DFL;
|
||||||
|
act.sa_flags = 0;
|
||||||
|
if (sigaction(SIGCHLD, &act, 0))
|
||||||
|
throw SysError("resetting SIGCHLD");
|
||||||
|
|
||||||
/* There is no privacy in the Nix system ;-) At least not for
|
/* There is no privacy in the Nix system ;-) At least not for
|
||||||
now. In particular, store objects should be readable by
|
now. In particular, store objects should be readable by
|
||||||
everybody. This prevents nasty surprises when using a shared
|
everybody. This prevents nasty surprises when using a shared
|
||||||
|
|
Loading…
Reference in a new issue