Page MenuHomeFreeBSD

D53762.id166593.diff
No OneTemporary

D53762.id166593.diff

diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -627,12 +627,20 @@
kev.data = kn->kn_id; /* parent */
kev.udata = kn->kn_kevent.udata;/* preserve udata */
error = kqueue_register(kq, &kev, NULL, M_NOWAIT);
+
+ /*
+ * Serialize updates to the kevent fields with threads scanning
+ * the queue.
+ */
+ list->kl_lock(list->kl_lockarg);
if (error)
kn->kn_fflags |= NOTE_TRACKERR;
- if (kn->kn_fop->f_event(kn, NOTE_FORK))
- KNOTE_ACTIVATE(kn, 0);
- list->kl_lock(list->kl_lockarg);
- KQ_LOCK(kq);
+ if (kn->kn_fop->f_event(kn, NOTE_FORK)) {
+ KQ_LOCK(kq);
+ KNOTE_ACTIVATE(kn, 1);
+ } else {
+ KQ_LOCK(kq);
+ }
kn_leave_flux(kn);
KQ_UNLOCK_FLUX(kq);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 13, 4:35 PM (20 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25536878
Default Alt Text
D53762.id166593.diff (766 B)

Event Timeline