diff options
author | Subv <subv2112@gmail.com> | 2017-01-04 16:53:01 +0100 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2017-01-05 15:40:14 +0100 |
commit | fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4 (patch) | |
tree | 5a3d1487e24f089b68358ddd8984c12e65623055 /src/core/hle/kernel/kernel.cpp | |
parent | Kernel: Use different thread statuses when a thread calls WaitSynchronization1 and WaitSynchronizationN with wait_all = true. (diff) | |
download | yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar.gz yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar.bz2 yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar.lz yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar.xz yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.tar.zst yuzu-fd95b6ee2606da4cd47c5f2916ad3b4f86c0e0f4.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/kernel.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 6f61d526a..955f50a9b 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -55,10 +55,16 @@ SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { if (ShouldWait(thread.get())) continue; - bool ready_to_run = std::none_of(thread->wait_objects.begin(), thread->wait_objects.end(), + // A thread is ready to run if it's either in THREADSTATUS_WAIT_SYNCH_ANY or + // in THREADSTATUS_WAIT_SYNCH_ALL and the rest of the objects it is waiting on are ready. + bool ready_to_run = true; + if (thread->status == THREADSTATUS_WAIT_SYNCH_ALL) { + ready_to_run = std::none_of(thread->wait_objects.begin(), thread->wait_objects.end(), [&thread](const SharedPtr<WaitObject>& object) { return object->ShouldWait(thread.get()); }); + } + if (ready_to_run) { candidate = thread.get(); candidate_priority = thread->current_priority; |