diff options
author | Ian Moffett <ian@osmora.org> | 2025-06-09 16:01:31 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-06-09 16:01:31 -0400 |
commit | cb195d202cf71e8bea71749600423190107a3621 (patch) | |
tree | 9ffbc5206b36378719c98cedd75862565fc3100d | |
parent | 8c24ed3189a9cf5a75809aa28f787d071615c0cd (diff) |
kernel: sched: No yield on wait + intoff on yield
Temporary workaround for issue relating to hangs on process yield
with a sleeping parent
Signed-off-by: Ian Moffett <ian@osmora.org>
-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; } |