aboutsummaryrefslogtreecommitdiff
path: root/lib/process.c
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2009-12-08 14:11:22 -0800
committerJesse Gross <jesse@nicira.com>2010-01-06 09:11:58 -0500
commitd8b30702057c18dac2f35fd766ef5d2a12786eae (patch)
treeee4bbb4724562a56b95b267e46cdbe49702fee02 /lib/process.c
parente26b5a068c2b43c19d24deb8bb84499b112069fb (diff)
fatal-signal: Run signal hooks outside of actual signal handlers.
Rather than running signal hooks directly from the actual signal handler, simply record the fact that the signal occured and run the hook next time around the poll loop. This allows significantly more freedom as to what can actually be done in the signal hooks.
Diffstat (limited to 'lib/process.c')
-rw-r--r--lib/process.c8
1 files changed, 0 insertions, 8 deletions
diff --git a/lib/process.c b/lib/process.c
index 12168f7e..3f66ddd9 100644
--- a/lib/process.c
+++ b/lib/process.c
@@ -201,17 +201,14 @@ process_start(char **argv,
}
block_sigchld(&oldsigs);
- fatal_signal_block();
pid = fork();
if (pid < 0) {
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
VLOG_WARN("fork failed: %s", strerror(errno));
return errno;
} else if (pid) {
/* Running in parent process. */
*pp = process_register(argv[0], pid);
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
return 0;
} else {
@@ -220,7 +217,6 @@ process_start(char **argv,
int fd;
fatal_signal_fork();
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
for (fd = 0; fd < fd_max; fd++) {
if (is_member(fd, null_fds, n_null_fds)) {
@@ -521,12 +517,10 @@ process_run_capture(char **argv, char **stdout_log, char **stderr_log,
}
block_sigchld(&oldsigs);
- fatal_signal_block();
pid = fork();
if (pid < 0) {
int error = errno;
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
VLOG_WARN("fork failed: %s", strerror(error));
@@ -539,7 +533,6 @@ process_run_capture(char **argv, char **stdout_log, char **stderr_log,
struct process *p;
p = process_register(argv[0], pid);
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
close(s_stdout.fds[1]);
@@ -575,7 +568,6 @@ process_run_capture(char **argv, char **stdout_log, char **stderr_log,
int i;
fatal_signal_fork();
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
dup2(get_null_fd(), 0);