From cd808cec50ea89eb8662446bc221a296b022e9c3 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Thu, 15 Nov 2007 21:45:17 +0000 Subject: [PATCH] Acquire the process mutex and spin locks before calling thread_exit() in kthread_exit() to fix panics when using INVARIANTS. --- sys/kern/kern_kthread.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c index 532b3c2a09b..ed7477478b3 100644 --- a/sys/kern/kern_kthread.c +++ b/sys/kern/kern_kthread.c @@ -317,14 +317,21 @@ kthread_add(void (*func)(void *), void *arg, struct proc *p, void kthread_exit(void) { - /* a module may be waiting for us to exit */ + struct proc *p; + + /* A module may be waiting for us to exit. */ wakeup(curthread); + /* * We could rely on thread_exit to call exit1() but * there is extra work that needs to be done */ if (curthread->td_proc->p_numthreads == 1) kproc_exit(0); /* never returns */ + + p = curthread->td_proc; + PROC_LOCK(p); + PROC_SLOCK(p); thread_exit(); }