diff options
author | Jesse Gross <jesse@nicira.com> | 2009-12-08 14:11:22 -0800 |
---|---|---|
committer | Jesse Gross <jesse@nicira.com> | 2010-01-06 09:11:58 -0500 |
commit | d8b30702057c18dac2f35fd766ef5d2a12786eae (patch) | |
tree | ee4bbb4724562a56b95b267e46cdbe49702fee02 /lib/process.c | |
parent | e26b5a068c2b43c19d24deb8bb84499b112069fb (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.c | 8 |
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); |