summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/thread.cpp1
-rw-r--r--src/core/hle/kernel/thread.h3
-rw-r--r--src/core/hle/kernel/wait_object.cpp3
3 files changed, 4 insertions, 3 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index ae62609e3..563a99bfc 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -133,6 +133,7 @@ void Thread::ResumeFromWait() {
133 133
134void Thread::CancelWait() { 134void Thread::CancelWait() {
135 ASSERT(GetStatus() == ThreadStatus::WaitSynch); 135 ASSERT(GetStatus() == ThreadStatus::WaitSynch);
136 ClearWaitObjects();
136 SetWaitSynchronizationResult(ERR_SYNCHRONIZATION_CANCELED); 137 SetWaitSynchronizationResult(ERR_SYNCHRONIZATION_CANCELED);
137 ResumeFromWait(); 138 ResumeFromWait();
138} 139}
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 4d220c4f9..ceb4d5159 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -319,6 +319,9 @@ public:
319 } 319 }
320 320
321 void ClearWaitObjects() { 321 void ClearWaitObjects() {
322 for (const auto& waiting_object : wait_objects) {
323 waiting_object->RemoveWaitingThread(this);
324 }
322 wait_objects.clear(); 325 wait_objects.clear();
323 } 326 }
324 327
diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp
index 50ed2a2f1..0f833fb3a 100644
--- a/src/core/hle/kernel/wait_object.cpp
+++ b/src/core/hle/kernel/wait_object.cpp
@@ -85,9 +85,6 @@ void WaitObject::WakeupWaitingThread(SharedPtr<Thread> thread) {
85 85
86 const std::size_t index = thread->GetWaitObjectIndex(this); 86 const std::size_t index = thread->GetWaitObjectIndex(this);
87 87
88 for (const auto& object : thread->GetWaitObjects()) {
89 object->RemoveWaitingThread(thread.get());
90 }
91 thread->ClearWaitObjects(); 88 thread->ClearWaitObjects();
92 89
93 thread->CancelWakeupTimer(); 90 thread->CancelWakeupTimer();