summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_thread.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2003-01-04 05:59:25 +0000
committerdavidxu <davidxu@FreeBSD.org>2003-01-04 05:59:25 +0000
commitbfa8b027c5a767a6d7405097c6e7c85dcee651d5 (patch)
treeec41e223263c7f2ffa8e6552f8f91888d6b7886a /sys/kern/kern_thread.c
parent3ef27dc5c5afababb776f10419bc01d2607599da (diff)
downloadFreeBSD-src-bfa8b027c5a767a6d7405097c6e7c85dcee651d5.zip
FreeBSD-src-bfa8b027c5a767a6d7405097c6e7c85dcee651d5.tar.gz
Set kse mailbox pointer to NULL when P_KSES is turned off.
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 b1e0abd..7e1982b 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 */
}
OpenPOWER on IntegriCloud