summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2005-04-19 12:31:15 +0000
committerdavidxu <davidxu@FreeBSD.org>2005-04-19 12:31:15 +0000
commit9452a25d2d8a61849660abb8d34cba673cab0d14 (patch)
tree9c86b614d3689df708166ddcaf393cdc74f108f5 /sys
parent6164476dea9f421c5fe3e050664d5ea7ff17cf7d (diff)
downloadFreeBSD-src-9452a25d2d8a61849660abb8d34cba673cab0d14.zip
FreeBSD-src-9452a25d2d8a61849660abb8d34cba673cab0d14.tar.gz
Clear P_STATCHILD earlier to avoid unnecessary retrying.
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_exit.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 67ef152..d7ff969 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -588,6 +588,11 @@ kern_wait(struct thread *td, pid_t pid, int *status, int options,
if (options &~ (WUNTRACED|WNOHANG|WCONTINUED|WLINUXCLONE))
return (EINVAL);
loop:
+ if (q->p_flag & P_STATCHILD) {
+ PROC_LOCK(q);
+ q->p_flag &= ~P_STATCHILD;
+ PROC_UNLOCK(q);
+ }
nfound = 0;
sx_xlock(&proctree_lock);
LIST_FOREACH(p, &q->p_children, p_sibling) {
OpenPOWER on IntegriCloud