summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-06-09 16:01:31 -0400
committerIan Moffett <ian@osmora.org>2025-06-09 16:01:31 -0400
commitcb195d202cf71e8bea71749600423190107a3621 (patch)
tree9ffbc5206b36378719c98cedd75862565fc3100d
parent8c24ed3189a9cf5a75809aa28f787d071615c0cd (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.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;
}