summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_thread.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2002-10-26 02:56:51 +0000
committerdavidxu <davidxu@FreeBSD.org>2002-10-26 02:56:51 +0000
commit9f183ef3fc4b399e4f2f692fae59561ff880bda8 (patch)
tree6492c9f839f3ded109f3c129f9bfa4997a515faa /sys/kern/kern_thread.c
parentd6616ee5d80ae5b0864582b12c622b7768b5c2ee (diff)
downloadFreeBSD-src-9f183ef3fc4b399e4f2f692fae59561ff880bda8.zip
FreeBSD-src-9f183ef3fc4b399e4f2f692fae59561ff880bda8.tar.gz
Move suspension checking code from userret() into thread_userret().
Diffstat (limited to 'sys/kern/kern_thread.c')
-rw-r--r--sys/kern/kern_thread.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 2b4ad4a..7721788 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -1241,6 +1241,18 @@ thread_userret(struct thread *td, struct trapframe *frame)
p = td->td_proc;
/*
+ * We need to check to see if we have to exit or wait due to a
+ * single threading requirement or some other STOP condition.
+ * Don't bother doing all the work if the stop bits are not set
+ * at this time.. If we miss it, we miss it.. no big deal.
+ */
+ if (P_SHOULDSTOP(p)) {
+ PROC_LOCK(p);
+ thread_suspend_check(0); /* Can suspend or kill */
+ PROC_UNLOCK(p);
+ }
+
+ /*
* Originally bound threads never upcall but they may
* loan out their KSE at this point.
* Upcalls imply bound.. They also may want to do some Philantropy.
OpenPOWER on IntegriCloud