diff options
author | 2015-07-19 06:12:06 +0000 | |
---|---|---|
committer | 2015-07-19 06:12:06 +0000 | |
commit | 9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6 (patch) | |
tree | dc9e020caa6df6a3ab6bab4cbb79a0c234453a81 /usr.bin/script/script.c | |
parent | Crank the major of libtls: the behaviour of tls_write() has been (diff) | |
download | wireguard-openbsd-9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6.tar.xz wireguard-openbsd-9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6.zip |
SIGCHLD handler was established before forking into two processes.
As a result it also ran in the child (incorrect).
ok miod
Diffstat (limited to 'usr.bin/script/script.c')
-rw-r--r-- | usr.bin/script/script.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/usr.bin/script/script.c b/usr.bin/script/script.c index 83b3cce43cd..102141a0001 100644 --- a/usr.bin/script/script.c +++ b/usr.bin/script/script.c @@ -1,4 +1,4 @@ -/* $OpenBSD: script.c,v 1.26 2015/03/15 00:41:28 millert Exp $ */ +/* $OpenBSD: script.c,v 1.27 2015/07/19 06:12:06 deraadt Exp $ */ /* $NetBSD: script.c,v 1.3 1994/12/21 08:55:43 jtc Exp $ */ /* @@ -139,9 +139,6 @@ main(int argc, char *argv[]) bzero(&sa, sizeof sa); sigemptyset(&sa.sa_mask); - sa.sa_handler = finish; - (void)sigaction(SIGCHLD, &sa, NULL); - sa.sa_handler = handlesigwinch; sa.sa_flags = SA_RESTART; (void)sigaction(SIGWINCH, &sa, NULL); @@ -163,6 +160,11 @@ main(int argc, char *argv[]) doshell(); } + bzero(&sa, sizeof sa); + sigemptyset(&sa.sa_mask); + sa.sa_handler = finish; + (void)sigaction(SIGCHLD, &sa, NULL); + (void)fclose(fscript); while (1) { if (dead) @@ -241,6 +243,11 @@ dooutput(void) sa.sa_handler = scriptflush; (void)sigaction(SIGALRM, &sa, NULL); + bzero(&sa, sizeof sa); + sigemptyset(&sa.sa_mask); + sa.sa_handler = SIG_IGN; + (void)sigaction(SIGCHLD, &sa, NULL); + value.it_interval.tv_sec = 30; value.it_interval.tv_usec = 0; value.it_value = value.it_interval; |