summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-10-10 14:04:14 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-15 17:55:20 +0200
commit1c6a11ab142d18c3444629940f183b7c1865a5e2 (patch)
tree3441b0285be95f9341852b86c383880151c38704
parentKernel: Correct redundant yields to only advance time forward. (diff)
downloadyuzu-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.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() {
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();