summaryrefslogtreecommitdiff
path: root/sys/kern/kern_thread.c
diff options
context:
space:
mode:
authorDavid Xu <davidxu@FreeBSD.org>2003-01-04 05:59:25 +0000
committerDavid Xu <davidxu@FreeBSD.org>2003-01-04 05:59:25 +0000
commit450c38d016543b2830d5a7fff9404289740a561e (patch)
treeec41e223263c7f2ffa8e6552f8f91888d6b7886a /sys/kern/kern_thread.c
parent889c37ceb32412611af67acaaf763e0b6574a5be (diff)
Notes
Diffstat (limited to 'sys/kern/kern_thread.c')
-rw-r--r--sys/kern/kern_thread.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index b1e0abd5af37..7e1982bc9d71 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -313,6 +313,7 @@ kse_exit(struct thread *td, struct kse_exit_args *uap)
{
struct proc *p;
struct ksegrp *kg;
+ struct kse *ke;
p = td->td_proc;
/* Only UTS can do the syscall */
@@ -327,13 +328,15 @@ kse_exit(struct thread *td, struct kse_exit_args *uap)
PROC_UNLOCK(p);
return (EDEADLK);
}
- if ((p->p_numthreads == 1) && (p->p_numksegrps == 1)) {
- /* XXXSKE what if >1 KSE? check.... */
+ ke = td->td_kse;
+ if (p->p_numthreads == 1) {
+ ke->ke_flags &= ~KEF_DOUPCALL;
+ ke->ke_mailbox = NULL;
p->p_flag &= ~P_KSES;
mtx_unlock_spin(&sched_lock);
PROC_UNLOCK(p);
} else {
- td->td_kse->ke_flags |= KEF_EXIT;
+ ke->ke_flags |= KEF_EXIT;
thread_exit();
/* NOTREACHED */
}