diff --git a/src/threads/synch.c b/src/threads/synch.c index 3dc15cd..1123249 100644 --- a/src/threads/synch.c +++ b/src/threads/synch.c @@ -302,14 +302,14 @@ lock_release (struct lock *lock) /* Excludes donors that aren't waiting for the lock being released, and tracks the rest. */ if (donor->waiting_lock == lock) - { - list_remove (e); - list_push_back (&orphan_list, e); + { + list_remove (e); + list_push_back (&orphan_list, e); - /* Identify highest priority donor. */ - if (max_donor == NULL || donor->priority > max_donor->priority) - max_donor = donor; - } + /* Identify highest priority donor. */ + if (max_donor == NULL || donor->priority > max_donor->priority) + max_donor = donor; + } e = next; } @@ -317,17 +317,10 @@ lock_release (struct lock *lock) /* If there exists a maximum donor thread waiting for this lock to be released, transfer the remaining orphaned donors to its donor list. */ if (max_donor != NULL) - { - tail = list_tail (&orphan_list); - e = list_begin (&orphan_list); - while (e != tail) - { - struct list_elem *next = list_next (e); - list_push_back (&max_donor->donors_list, e); - - e = next; - } - } + { + while (!list_empty (&orphan_list)) + list_push_back (&max_donor->donors_list, list_pop_front (&orphan_list)); + } /* Removal of donors to this thread may change its effective priority, so recalculate. */