Index: kern_kse.c =================================================================== RCS file: /private/FreeBSD/src/sys/kern/kern_kse.c,v retrieving revision 1.210 diff -u -p -r1.210 kern_kse.c --- kern_kse.c 29 Jan 2005 23:11:59 -0000 1.210 +++ kern_kse.c 11 Feb 2005 18:15:00 -0000 @@ -416,9 +416,9 @@ kse_release(struct thread *td, struct ks sigexit(td, SIGSEGV); } } - PROC_LOCK(p); if (ku->ku_mflags & KMF_WAITSIGEVENT) { /* UTS wants to wait for signal event */ + PROC_LOCK(p); if (!(p->p_flag & P_SIGEVENT) && !(ku->ku_flags & KUF_DOUPCALL)) { td->td_kflags |= TDK_KSERELSIG; @@ -437,13 +437,14 @@ kse_release(struct thread *td, struct ks (kg->kg_completed == NULL))) { kg->kg_upsleeps++; td->td_kflags |= TDK_KSEREL; + PROC_LOCK(p); error = msleep(&kg->kg_completed, &p->p_mtx, PPAUSE|PCATCH, "kserel", (uap->timeout ? tvtohz(&tv) : 0)); + PROC_UNLOCK(p); td->td_kflags &= ~(TDK_KSEREL | TDK_WAKEUP); kg->kg_upsleeps--; } - PROC_UNLOCK(p); } if (ku->ku_flags & KUF_DOUPCALL) { mtx_lock_spin(&sched_lock);