On Tuesday, October 26, 2010 11:55:10 am Matthew Fleming wrote:
No, it's actually on purpose I think as the other bits under notyet destroy
the thread when the last handler for it goes away.
However, ithread_destroy() does not block in any of 7.x or later:
static void
ithread_destroy(struct intr_thread *ithread)
{
struct thread *td;
CTR2(KTR_INTR, "%s: killing %s", __func__, ithread->it_event->ie_name);
td = ithread->it_thread;
thread_lock(td);
ithread->it_flags |= IT_DEAD;
if (TD_AWAITING_INTR(td)) {
TD_CLR_IWAIT(td);
sched_add(td, SRQ_INTR);
}
thread_unlock(td);
}
Maybe you have a local change? If so, you can probably unlock the global
event_list lock before calling ithread_destroy() (but after the
TAILQ_REMOVE()) in intr_event_destroy().
--
John Baldwin
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"