diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 1c487cdebda7..5a9d516df898 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -533,11 +533,12 @@ knote_fork(struct knlist *list, int pid) struct kevent kev; int error; - if (list == NULL) + MPASS(list != NULL); + KNL_ASSERT_LOCKED(list); + if (SLIST_EMPTY(&list->kl_list)) return; memset(&kev, 0, sizeof(kev)); - list->kl_lock(list->kl_lockarg); SLIST_FOREACH(kn, &list->kl_list, kn_selnext) { kq = kn->kn_kq; KQ_LOCK(kq); @@ -606,7 +607,6 @@ knote_fork(struct knlist *list, int pid) kn_leave_flux(kn); KQ_UNLOCK_FLUX(kq); } - list->kl_unlock(list->kl_lockarg); } /* diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 38b72eb1d258..91cf7a3ec440 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -685,16 +685,16 @@ do_fork(struct thread *td, struct fork_req *fr, struct proc *p2, struct thread * } PROC_UNLOCK(p2); + /* + * Tell any interested parties about the new process. + */ + knote_fork(p1->p_klist, p2->p_pid); + /* * Now can be swapped. */ _PRELE(p1); PROC_UNLOCK(p1); - - /* - * Tell any interested parties about the new process. - */ - knote_fork(p1->p_klist, p2->p_pid); SDT_PROBE3(proc, , , create, p2, p1, fr->fr_flags); if (fr->fr_flags & RFPROCDESC) {