summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2022-07-09 18:54:54 -0400
committerLiam <byteslice@airmail.cc>2022-07-09 18:54:54 -0400
commit1611c53c12256cb01813310bbef673f42951b8de (patch)
tree4aa5eda26aed9145f724f442ff9e5e8220b5c22e /src
parent313f047f974249c0fa004056ced3f18a8c61eae4 (diff)
kernel: fix usage of waiter_list in Finalize
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/k_thread.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp
index 50cb5fc90..90de86770 100644
--- a/src/core/hle/kernel/k_thread.cpp
+++ b/src/core/hle/kernel/k_thread.cpp
@@ -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);
}
}