Fix scheduler starvation, use lists for scheduling
All checks were successful
Build documentation / build-and-deploy (push) Successful in 33s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 33s
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user