summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_trap.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2002-10-26 04:44:17 +0000
committerjulian <julian@FreeBSD.org>2002-10-26 04:44:17 +0000
commit64467d2a2f613c979b9899e3f2099af3d84348a5 (patch)
treed2c2261decd2b0cb6aaeebb97f2935d4658e729e /sys/kern/subr_trap.c
parent399bd27ee2b4d2da48540b3b06950046f4eeb912 (diff)
downloadFreeBSD-src-64467d2a2f613c979b9899e3f2099af3d84348a5.zip
FreeBSD-src-64467d2a2f613c979b9899e3f2099af3d84348a5.tar.gz
iBack out david's last commit. the suspension code needs to be called
for non KSE processes too.
Diffstat (limited to 'sys/kern/subr_trap.c')
-rw-r--r--sys/kern/subr_trap.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index 2337423..9f8bed0 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -100,8 +100,19 @@ userret(td, frame, oticks)
sched_userret(td);
/*
- * Do special thread processing, e.g. suspension checking, upcall
- * tweaking and such.
+ * 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);
+ }
+
+ /*
+ * Do special thread processing, e.g. upcall tweaking and such.
*/
if (p->p_flag & P_KSES) {
thread_userret(td, frame);
OpenPOWER on IntegriCloud