diff options
author | Russ Cox <rsc@swtch.com> | 2011-05-01 15:38:18 -0400 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2011-05-01 15:38:18 -0400 |
commit | 333482548d6b93fede42dc1944d3bb692098a211 (patch) | |
tree | 5ccde9bbd19c9a08e76b444c3ecacfddbeacec4f /src | |
parent | f444695a2ab0237262b25c590c2dd9309f225128 (diff) | |
download | plan9port-333482548d6b93fede42dc1944d3bb692098a211.tar.gz plan9port-333482548d6b93fede42dc1944d3bb692098a211.tar.bz2 plan9port-333482548d6b93fede42dc1944d3bb692098a211.zip |
lib9: restore SIGCHLD handler in rfork
R=rsc
http://codereview.appspot.com/4436071
Diffstat (limited to 'src')
-rw-r--r-- | src/lib9/rfork.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/lib9/rfork.c b/src/lib9/rfork.c index a14d11ed..bbd08b0a 100644 --- a/src/lib9/rfork.c +++ b/src/lib9/rfork.c @@ -18,6 +18,9 @@ p9rfork(int flags) int n; char buf[128], *q; extern char **environ; + struct sigaction oldchld; + + memset(&oldchld, 0, sizeof oldchld); if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){ /* check other flags before we commit */ @@ -28,12 +31,7 @@ p9rfork(int flags) return -1; } if(flags&RFNOWAIT){ - /* - * BUG - should put the signal handler back after we - * finish, but I just don't care. If a program calls with - * NOWAIT once, they're not likely to want child notes - * after that. - */ + sigaction(SIGCHLD, nil, &oldchld); signal(SIGCHLD, nop); if(pipe(p) < 0) return -1; @@ -97,6 +95,7 @@ p9rfork(int flags) close(p[1]); } } + sigaction(SIGCHLD, &oldchld, nil); } if(pid != 0) return pid; |