diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2019-10-10 14:04:14 +0200 |
---|---|---|
committer | FernandoS27 <fsahmkow27@gmail.com> | 2019-10-15 17:55:20 +0200 |
commit | 1c6a11ab142d18c3444629940f183b7c1865a5e2 (patch) | |
tree | 3441b0285be95f9341852b86c383880151c38704 | |
parent | Kernel: Correct redundant yields to only advance time forward. (diff) | |
download | yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar.gz yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar.bz2 yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar.lz yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar.xz yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.tar.zst yuzu-1c6a11ab142d18c3444629940f183b7c1865a5e2.zip |
-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() { void Thread::CancelWait() { ASSERT(GetStatus() == ThreadStatus::WaitSynch); + ClearWaitObjects(); SetWaitSynchronizationResult(ERR_SYNCHRONIZATION_CANCELED); ResumeFromWait(); } 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: } void ClearWaitObjects() { + for (const auto& waiting_object : wait_objects) { + waiting_object->RemoveWaitingThread(this); + } wait_objects.clear(); } 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) { const std::size_t index = thread->GetWaitObjectIndex(this); - for (const auto& object : thread->GetWaitObjects()) { - object->RemoveWaitingThread(thread.get()); - } thread->ClearWaitObjects(); thread->CancelWakeupTimer(); |