diff options
-rw-r--r-- | sys/kern/kern_sched.c | 9 |
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; } |