Merge pull request #8559 from liamwhite/waiter-list

kernel: fix usage of waiter_list in Finalize
This commit is contained in:
bunnei 2022-07-11 12:10:01 -07:00 committed by GitHub
commit 802bbb2263
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -308,14 +308,20 @@ void KThread::Finalize() {
auto it = waiter_list.begin(); auto it = waiter_list.begin();
while (it != waiter_list.end()) { while (it != waiter_list.end()) {
// Clear the lock owner // Get the thread.
it->SetLockOwner(nullptr); 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. // Erase the waiter from our list.
it = waiter_list.erase(it); it = waiter_list.erase(it);
// Cancel the thread's wait. // Cancel the thread's wait.
it->CancelWait(ResultInvalidState, true); waiter->CancelWait(ResultInvalidState, true);
} }
} }