diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.h | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/wait_object.cpp | 3 |
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 | ||
| 134 | void Thread::CancelWait() { | 134 | void 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(); |