summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2015-06-17 18:07:15 -0400
committerGravatar bunnei2015-06-17 18:07:15 -0400
commit2e16edbc56c51265250269dd2d5e8b7b71335656 (patch)
tree7634b833a4c5a647a172f29cff281920ce0f07ed /src/core/hle/kernel/kernel.cpp
parentMerge pull request #864 from linkmauve/gl-info (diff)
parentkernel: Fix svcWaitSynch to always acquire requested wait objects. (diff)
downloadyuzu-2e16edbc56c51265250269dd2d5e8b7b71335656.tar.gz
yuzu-2e16edbc56c51265250269dd2d5e8b7b71335656.tar.xz
yuzu-2e16edbc56c51265250269dd2d5e8b7b71335656.zip
Merge pull request #849 from bunnei/fix-waitsynch-2
Fix svcWaitSynch to correctly acquire wait objects
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp22
1 files changed, 4 insertions, 18 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 726e4d2ff..20e11da16 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -32,27 +32,13 @@ void WaitObject::RemoveWaitingThread(Thread* thread) {
32 waiting_threads.erase(itr); 32 waiting_threads.erase(itr);
33} 33}
34 34
35SharedPtr<Thread> WaitObject::WakeupNextThread() {
36 if (waiting_threads.empty())
37 return nullptr;
38
39 auto next_thread = std::move(waiting_threads.front());
40 waiting_threads.erase(waiting_threads.begin());
41
42 next_thread->ReleaseWaitObject(this);
43
44 return next_thread;
45}
46
47void WaitObject::WakeupAllWaitingThreads() { 35void WaitObject::WakeupAllWaitingThreads() {
48 auto waiting_threads_copy = waiting_threads; 36 for (auto thread : waiting_threads)
37 thread->ResumeFromWait();
49 38
50 // We use a copy because ReleaseWaitObject will remove the thread from this object's 39 waiting_threads.clear();
51 // waiting_threads list
52 for (auto thread : waiting_threads_copy)
53 thread->ReleaseWaitObject(this);
54 40
55 ASSERT_MSG(waiting_threads.empty(), "failed to awaken all waiting threads!"); 41 HLE::Reschedule(__func__);
56} 42}
57 43
58HandleTable::HandleTable() { 44HandleTable::HandleTable() {