summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_kthread.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c
index 532b3c2a09b1..ed7477478b3f 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();
}