|
|
|
@ -308,14 +308,20 @@ void KThread::Finalize() { |
|
|
|
|
|
|
|
auto it = waiter_list.begin(); |
|
|
|
while (it != waiter_list.end()) { |
|
|
|
// Clear the lock owner
|
|
|
|
it->SetLockOwner(nullptr); |
|
|
|
// Get the thread.
|
|
|
|
KThread* const waiter = std::addressof(*it); |
|
|
|
|
|
|
|
// The thread shouldn't be a kernel waiter.
|
|
|
|
ASSERT(!IsKernelAddressKey(waiter->GetAddressKey())); |
|
|
|
|
|
|
|
// Clear the lock owner.
|
|
|
|
waiter->SetLockOwner(nullptr); |
|
|
|
|
|
|
|
// Erase the waiter from our list.
|
|
|
|
it = waiter_list.erase(it); |
|
|
|
|
|
|
|
// Cancel the thread's wait.
|
|
|
|
it->CancelWait(ResultInvalidState, true); |
|
|
|
waiter->CancelWait(ResultInvalidState, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|