diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2016-12-26 09:52:19 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2016-12-26 09:52:19 +0000 |
| commit | c491fd83f7d85612367271160cdb6abb7c5b4432 (patch) | |
| tree | e3816107264541038923aa0573ab0047d4b56908 /sys | |
| parent | 36e8472a71089d89e2ffa7442d54004bb6116ad1 (diff) | |
MFC r310302:
Do not clear KN_INFLUX when not owning influx state.
PR: 214923
Notes
svn path=/stable/11/; revision=310578
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/kern/kern_event.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index b734cf271bca..e832120836ce 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2006,6 +2006,7 @@ knote(struct knlist *list, long hint, int lockflags) struct kqueue *kq; struct knote *kn, *tkn; int error; + bool own_influx; if (list == NULL) return; @@ -2036,11 +2037,14 @@ knote(struct knlist *list, long hint, int lockflags) */ KQ_UNLOCK(kq); } else if ((lockflags & KNF_NOKQLOCK) != 0) { - kn->kn_status |= KN_INFLUX; + own_influx = (kn->kn_status & KN_INFLUX) == 0; + if (own_influx) + kn->kn_status |= KN_INFLUX; KQ_UNLOCK(kq); error = kn->kn_fop->f_event(kn, hint); KQ_LOCK(kq); - kn->kn_status &= ~KN_INFLUX; + if (own_influx) + kn->kn_status &= ~KN_INFLUX; if (error) KNOTE_ACTIVATE(kn, 1); KQ_UNLOCK_FLUX(kq); |
