summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_sched.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c
index d656f94..ec5592e 100644
--- a/sys/kern/kern_sched.c
+++ b/sys/kern/kern_sched.c
@@ -264,11 +264,18 @@ sched_yield(void)
}
td->rested = true;
- ci->curtd = NULL;
+ /* FIXME: Hang yielding when waited on */
+ if (ISSET(td->flags, PROC_WAITED)) {
+ return;
+ }
+
+ ci->curtd = NULL;
md_inton();
sched_oneshot(false);
+
md_hlt();
+ md_intoff();
ci->curtd = td;
}