Page MenuHomeFreeBSD

D18060.id50646.diff
No OneTemporary

D18060.id50646.diff

Index: sys/kern/kern_event.c
===================================================================
--- sys/kern/kern_event.c
+++ sys/kern/kern_event.c
@@ -1533,6 +1533,8 @@
kn->kn_kevent.flags &= ~(EV_ADD | EV_DELETE |
EV_ENABLE | EV_DISABLE | EV_FORCEONESHOT);
kn->kn_status = KN_DETACHED;
+ if ((kev->flags & EV_DISABLE) != 0)
+ kn->kn_status |= KN_DISABLED;
kn_enter_flux(kn);
error = knote_attach(kn, kq);
@@ -1568,6 +1570,11 @@
KNOTE_ACTIVATE(kn, 1);
}
+ if ((kev->flags & EV_ENABLE) != 0)
+ kn->kn_status &= ~KN_DISABLED;
+ else if ((kev->flags & EV_DISABLE) != 0)
+ kn->kn_status |= KN_DISABLED;
+
/*
* The user may change some filter values after the initial EV_ADD,
* but doing so will not reset any filter which has already been
@@ -1593,11 +1600,9 @@
* kn_knlist.
*/
done_ev_add:
- if ((kev->flags & EV_ENABLE) != 0)
- kn->kn_status &= ~KN_DISABLED;
- else if ((kev->flags & EV_DISABLE) != 0)
- kn->kn_status |= KN_DISABLED;
-
+ /*
+ * KN_DISABLED will not be set or cleared while the knote is in flux.
+ */
if ((kn->kn_status & KN_DISABLED) == 0)
event = kn->kn_fop->f_event(kn, 0);
else

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 21, 3:22 AM (16 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27788058
Default Alt Text
D18060.id50646.diff (1 KB)

Event Timeline