Fix scheduler starvation, use lists for scheduling
All checks were successful
Build documentation / build-and-deploy (push) Successful in 33s

This commit is contained in:
2026-01-22 11:54:52 +01:00
parent 7eceecf6e3
commit fea0999726
9 changed files with 83 additions and 54 deletions

View File

@@ -34,6 +34,7 @@ try:
spin_unlock (&mutex->resource->lock, &ctxmt);
DEBUG ("proc->pid=%d\n", proc->pid);
proc_suspend (proc, &mutex->suspension_q);
goto try;
@@ -52,11 +53,10 @@ bool proc_mutex_unlock (struct proc* proc, struct proc_mutex* mutex) {
spin_lock (&mutex->suspension_q.lock, &ctxsq);
struct proc* resumed_proc = NULL;
struct rb_node_link* node;
rbtree_first (&mutex->suspension_q.proc_tree, node);
struct list_node_link* node = mutex->suspension_q.proc_list;
if (node) {
resumed_proc = rbtree_entry (node, struct proc, suspension_link);
resumed_proc = list_entry (node, struct proc, suspension_link);
mutex->owner = resumed_proc;
mutex->locked = true;