diff options
author | davidxu <davidxu@FreeBSD.org> | 2003-01-04 05:59:25 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2003-01-04 05:59:25 +0000 |
commit | bfa8b027c5a767a6d7405097c6e7c85dcee651d5 (patch) | |
tree | ec41e223263c7f2ffa8e6552f8f91888d6b7886a /sys/kern/kern_thread.c | |
parent | 3ef27dc5c5afababb776f10419bc01d2607599da (diff) | |
download | FreeBSD-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.c | 9 |
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 */ } |