diff options
author | 2008-03-16 15:44:18 +0000 | |
---|---|---|
committer | 2008-03-16 15:44:18 +0000 | |
commit | 14aef417a7018423d7a326b5becf9e39f7ad23ce (patch) | |
tree | 4678020fc6b86e5cff582848168fb286c4165d8e | |
parent | use ellipsis to show that more than one disk is allowed (diff) | |
download | wireguard-openbsd-14aef417a7018423d7a326b5becf9e39f7ad23ce.tar.xz wireguard-openbsd-14aef417a7018423d7a326b5becf9e39f7ad23ce.zip |
syslogd leaves zombies around if multiple |/pathto/mylogprog
children died in a row.
Do waitpid(2) in a loop until there's nothing left.
OK henning@, millert@
-rw-r--r-- | usr.sbin/syslogd/privsep.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/usr.sbin/syslogd/privsep.c b/usr.sbin/syslogd/privsep.c index 8ffbdd7c850..13b74e14d5a 100644 --- a/usr.sbin/syslogd/privsep.c +++ b/usr.sbin/syslogd/privsep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: privsep.c,v 1.30 2007/03/15 05:18:32 djm Exp $ */ +/* $OpenBSD: privsep.c,v 1.31 2008/03/16 15:44:18 mpf Exp $ */ /* * Copyright (c) 2003 Anil Madhavapeddy <anil@recoil.org> @@ -753,11 +753,9 @@ sig_got_chld(int sig) do { pid = waitpid(WAIT_ANY, NULL, WNOHANG); - } while (pid == -1 && errno == EINTR); - - if (pid == child_pid && - cur_state < STATE_QUIT) - cur_state = STATE_QUIT; + if (pid == child_pid && cur_state < STATE_QUIT) + cur_state = STATE_QUIT; + } while (pid > 0 || (pid == -1 && errno == EINTR)); } /* Read all data or return 1 for error. */ |