Index: kern_event.c =================================================================== RCS file: /usr/cvs/src/sys/kern/kern_event.c,v retrieving revision 1.95 diff -u -r1.95 kern_event.c --- kern_event.c 12 Oct 2005 17:51:31 -0000 1.95 +++ kern_event.c 13 Apr 2006 19:59:47 -0000 @@ -1179,7 +1163,6 @@ if (timeout < 0) { error = EWOULDBLOCK; } else { - KQ_GLOBAL_UNLOCK(&kq_global, haskqglobal); kq->kq_state |= KQ_SLEEP; error = msleep(kq, &kq->kq_lock, PSOCK | PCATCH, "kqread", timeout); @@ -1201,7 +1184,6 @@ if ((kn->kn_status == KN_MARKER && kn != marker) || (kn->kn_status & KN_INFLUX) == KN_INFLUX) { - KQ_GLOBAL_UNLOCK(&kq_global, haskqglobal); kq->kq_state |= KQ_FLUXWAIT; error = msleep(kq, &kq->kq_lock, PSOCK, "kqflxwt", 0); @@ -1246,6 +1228,7 @@ KN_LIST_LOCK(kn); if (kn->kn_fop->f_event(kn, 0) == 0) { KQ_LOCK(kq); + KQ_GLOBAL_UNLOCK(&kq_global, haskqglobal); kn->kn_status &= ~(KN_QUEUED | KN_ACTIVE | KN_INFLUX); kq->kq_count--; @@ -1254,6 +1237,7 @@ } *kevp = kn->kn_kevent; KQ_LOCK(kq); + KQ_GLOBAL_UNLOCK(&kq_global, haskqglobal); if (kn->kn_flags & EV_CLEAR) { kn->kn_data = 0; kn->kn_fflags = 0; @@ -1264,7 +1248,6 @@ kn->kn_status &= ~(KN_INFLUX); KN_LIST_UNLOCK(kn); - } /* we are returning a copy to the user */ @@ -1286,7 +1269,6 @@ done: KQ_OWNED(kq); KQ_UNLOCK_FLUX(kq); - KQ_GLOBAL_UNLOCK(&kq_global, haskqglobal); knote_free(marker); done_nl: KQ_NOTOWNED(kq);