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();
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);
}
}