|
|
|
@ -35,8 +35,6 @@ static std::pair<std::shared_ptr<Thread>, u32> GetHighestPriorityMutexWaitingThr
|
|
|
|
|
if (thread->GetMutexWaitAddress() != mutex_addr)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
ASSERT(thread->GetStatus() == ThreadStatus::WaitMutex);
|
|
|
|
|
|
|
|
|
|
++num_waiters;
|
|
|
|
|
if (highest_priority_thread == nullptr ||
|
|
|
|
|
thread->GetPriority() < highest_priority_thread->GetPriority()) {
|
|
|
|
@ -50,6 +48,7 @@ static std::pair<std::shared_ptr<Thread>, u32> GetHighestPriorityMutexWaitingThr
|
|
|
|
|
/// Update the mutex owner field of all threads waiting on the mutex to point to the new owner.
|
|
|
|
|
static void TransferMutexOwnership(VAddr mutex_addr, std::shared_ptr<Thread> current_thread,
|
|
|
|
|
std::shared_ptr<Thread> new_owner) {
|
|
|
|
|
current_thread->RemoveMutexWaiter(new_owner);
|
|
|
|
|
const auto threads = current_thread->GetMutexWaitingThreads();
|
|
|
|
|
for (const auto& thread : threads) {
|
|
|
|
|
if (thread->GetMutexWaitAddress() != mutex_addr)
|
|
|
|
|