Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_event.c
Show First 20 Lines • Show All 543 Lines • ▼ Show 20 Lines | if (kn_in_flux(kn) && (kn->kn_status & KN_SCAN) == 0) { | ||||
KQ_UNLOCK(kq); | KQ_UNLOCK(kq); | ||||
continue; | continue; | ||||
} | } | ||||
/* | /* | ||||
* The same as knote(), activate the event. | * The same as knote(), activate the event. | ||||
*/ | */ | ||||
if ((kn->kn_sfflags & NOTE_TRACK) == 0) { | if ((kn->kn_sfflags & NOTE_TRACK) == 0) { | ||||
kn->kn_status |= KN_HASKQLOCK; | |||||
if (kn->kn_fop->f_event(kn, NOTE_FORK)) | if (kn->kn_fop->f_event(kn, NOTE_FORK)) | ||||
KNOTE_ACTIVATE(kn, 1); | KNOTE_ACTIVATE(kn, 1); | ||||
kn->kn_status &= ~KN_HASKQLOCK; | |||||
KQ_UNLOCK(kq); | KQ_UNLOCK(kq); | ||||
continue; | continue; | ||||
} | } | ||||
/* | /* | ||||
* The NOTE_TRACK case. In addition to the activation | * The NOTE_TRACK case. In addition to the activation | ||||
* of the event, we need to register new events to | * of the event, we need to register new events to | ||||
* track the child. Drop the locks in preparation for | * track the child. Drop the locks in preparation for | ||||
▲ Show 20 Lines • Show All 1,703 Lines • ▼ Show 20 Lines | if (kn_in_flux(kn) && (kn->kn_status & KN_SCAN) == 0) { | ||||
KQ_UNLOCK(kq); | KQ_UNLOCK(kq); | ||||
error = kn->kn_fop->f_event(kn, hint); | error = kn->kn_fop->f_event(kn, hint); | ||||
KQ_LOCK(kq); | KQ_LOCK(kq); | ||||
kn_leave_flux(kn); | kn_leave_flux(kn); | ||||
if (error) | if (error) | ||||
KNOTE_ACTIVATE(kn, 1); | KNOTE_ACTIVATE(kn, 1); | ||||
KQ_UNLOCK_FLUX(kq); | KQ_UNLOCK_FLUX(kq); | ||||
} else { | } else { | ||||
kn->kn_status |= KN_HASKQLOCK; | |||||
if (kn->kn_fop->f_event(kn, hint)) | if (kn->kn_fop->f_event(kn, hint)) | ||||
KNOTE_ACTIVATE(kn, 1); | KNOTE_ACTIVATE(kn, 1); | ||||
kn->kn_status &= ~KN_HASKQLOCK; | |||||
KQ_UNLOCK(kq); | KQ_UNLOCK(kq); | ||||
} | } | ||||
} | } | ||||
if ((lockflags & KNF_LISTLOCKED) == 0) | if ((lockflags & KNF_LISTLOCKED) == 0) | ||||
list->kl_unlock(list->kl_lockarg); | list->kl_unlock(list->kl_lockarg); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 448 Lines • Show Last 20 Lines |