aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/sys_procdesc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/sys_procdesc.c')
-rw-r--r--sys/kern/sys_procdesc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c
index 862b59262d0c..608771b9f38c 100644
--- a/sys/kern/sys_procdesc.c
+++ b/sys/kern/sys_procdesc.c
@@ -507,11 +507,14 @@ procdesc_kqops_event(struct knote *kn, long hint)
if ((kn->kn_sfflags & event) != 0)
kn->kn_fflags |= kn->kn_sfflags & event;
+ /* Report exit status */
+ if ((kn->kn_fflags & NOTE_EXIT) != 0)
+ kn->kn_data = pd->pd_xstat;
+
/* Process is gone, so flag the event as finished. */
- if ((event & NOTE_EXIT) != 0) {
+ if ((event & NOTE_REAP) != 0 ||
+ ((event & NOTE_EXIT) != 0 && (kn->kn_sfflags & NOTE_REAP) == 0)) {
kn->kn_flags |= EV_EOF | EV_ONESHOT;
- if (kn->kn_fflags & NOTE_EXIT)
- kn->kn_data = pd->pd_xstat;
if (kn->kn_fflags == 0)
kn->kn_flags |= EV_DROP;
return (1);