summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-08-20 22:44:26 +0000
committerkib <kib@FreeBSD.org>2015-08-20 22:44:26 +0000
commitfd746f624663b3def17d398dac3e68a2c1b6d28d (patch)
treeb90eb6fb7d8be10ce40ba23e9e14048ffac21731
parentade43a0fe39f5fbe2fd890cecfde25b8940d9b93 (diff)
downloadFreeBSD-src-fd746f624663b3def17d398dac3e68a2c1b6d28d.zip
FreeBSD-src-fd746f624663b3def17d398dac3e68a2c1b6d28d.tar.gz
If process becomes reaper (procctl(PROC_REAP_ACQUIRE)) while already
having some children, the children' reaper is not reset to the parent. This allows for the situation where reaper has children but not descendands and the too strict asserts in the reap_status() fire. Remove the wrong asserts, add some clarification for the situation to the procctl(2) REAP_STATUS. Reported and tested by: feld Sponsored by: The FreeBSD Foundation MFC after: 1 week
-rw-r--r--lib/libc/sys/procctl.28
-rw-r--r--sys/kern/kern_procctl.c2
2 files changed, 6 insertions, 4 deletions
diff --git a/lib/libc/sys/procctl.2 b/lib/libc/sys/procctl.2
index 76a3cef..dc00093 100644
--- a/lib/libc/sys/procctl.2
+++ b/lib/libc/sys/procctl.2
@@ -29,7 +29,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 29, 2014
+.Dd August 21, 2015
.Dt PROCCTL 2
.Os
.Sh NAME
@@ -148,7 +148,11 @@ The specified process is the root of the reaper tree, i.e.
.Pp
The
.Fa rs_children
-field returns the number of children of the reaper.
+field returns the number of children of the reaper among the descendands.
+It is possible to have a child which reaper is not the specified process,
+since the reaper for the existing children is not reset on the
+.Dv PROC_REAP_ACQUIRE
+operation.
The
.Fa rs_descendants
field returns the total number of descendants of the reaper(s),
diff --git a/sys/kern/kern_procctl.c b/sys/kern/kern_procctl.c
index d65ba5a..8ef72901 100644
--- a/sys/kern/kern_procctl.c
+++ b/sys/kern/kern_procctl.c
@@ -187,8 +187,6 @@ reap_status(struct thread *td, struct proc *p,
}
} else {
rs->rs_pid = -1;
- KASSERT(LIST_EMPTY(&reap->p_reaplist), ("reap children list"));
- KASSERT(LIST_EMPTY(&reap->p_children), ("children list"));
}
return (0);
}
OpenPOWER on IntegriCloud