Page MenuHomeFreeBSD

D44401.id135860.diff
No OneTemporary

D44401.id135860.diff

diff --git a/usr.sbin/daemon/daemon.c b/usr.sbin/daemon/daemon.c
--- a/usr.sbin/daemon/daemon.c
+++ b/usr.sbin/daemon/daemon.c
@@ -755,18 +755,21 @@
}
/*
- * Returns true if SIGCHILD came from state->pid
- * This function could hang if SIGCHILD was emittied for a reason other than
- * child dying (e.g., ptrace attach).
+ * Returns true if SIGCHILD came from state->pid due to its exit.
*/
static bool
daemon_is_child_dead(struct daemon_state *state)
{
+ int status;
+
for (;;) {
- int who = waitpid(-1, NULL, WNOHANG);
- if (state->pid == who) {
+ int who = waitpid(-1, &status, WNOHANG);
+ if (state->pid == who && WIFEXITED(status)) {
return true;
}
+ if (who == 0) {
+ return (false);
+ }
if (who == -1 && errno != EINTR) {
warn("waitpid");
return false;

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 28, 7:59 AM (9 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17827432
Default Alt Text
D44401.id135860.diff (798 B)

Event Timeline