diff options
Diffstat (limited to 'sys/kern/sys_procdesc.c')
| -rw-r--r-- | sys/kern/sys_procdesc.c | 9 |
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); |
