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(); }