aboutsummaryrefslogtreecommitdiff
path: root/src/lib9
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2011-05-01 15:38:18 -0400
committerRuss Cox <rsc@swtch.com>2011-05-01 15:38:18 -0400
commit333482548d6b93fede42dc1944d3bb692098a211 (patch)
tree5ccde9bbd19c9a08e76b444c3ecacfddbeacec4f /src/lib9
parentf444695a2ab0237262b25c590c2dd9309f225128 (diff)
downloadplan9port-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/lib9')
-rw-r--r--src/lib9/rfork.c11
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;