Refactor donate_priority to include comments explaining its purpose and logic w/ S
This commit is contained in:
@@ -194,16 +194,25 @@ lock_init (struct lock *lock)
|
||||
sema_init (&lock->semaphore, 1);
|
||||
}
|
||||
|
||||
/* Allows for the donor to donate its priority to donee, iteratively
|
||||
propagating the donation in the case of chains in the wait-for graph.
|
||||
Also keeps track of the donation by updating the donors list. */
|
||||
static void
|
||||
donate_priority (struct thread *donor, struct thread *donee) {
|
||||
list_push_back (&donee->donors_list, &donor->donor_elem);
|
||||
|
||||
while (donee != NULL)
|
||||
{
|
||||
/* Stop propagation of donation once a donee is reached that has
|
||||
a higher effective priority (as its donees can't have less
|
||||
priority than that being donated). */
|
||||
if (donor->priority <= donee->priority)
|
||||
break;
|
||||
|
||||
donee->priority = donor->priority;
|
||||
|
||||
/* Also stop propagation of donation once a donee is reached with
|
||||
no donees of its own (sink node in WFG). */
|
||||
if (donee->waiting_lock == NULL)
|
||||
donee = NULL;
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user