summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2016-12-04 15:58:36 +0100
committerSubv <subv2112@gmail.com>2016-12-04 15:58:36 +0100
commitbdad00c73f46106ba78995bdde1b50349e940b09 (patch)
tree1c39ab11c8e995f2cbba8a5f602ab64819085b22 /src/core/hle/kernel/kernel.cpp
parentThreading: Reworked the way our scheduler works. (diff)
downloadyuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.gz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.bz2
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.lz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.xz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.zst
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/kernel.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index be7a5a6d8..6d358def7 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -33,7 +33,7 @@ void WaitObject::RemoveWaitingThread(Thread* thread) {
SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() {
// Remove the threads that are ready or already running from our waitlist
- waiting_threads.erase(std::remove_if(waiting_threads.begin(), waiting_threads.end(), [](SharedPtr<Thread> thread) -> bool {
+ waiting_threads.erase(std::remove_if(waiting_threads.begin(), waiting_threads.end(), [](const SharedPtr<Thread>& thread) -> bool {
return thread->status == THREADSTATUS_RUNNING || thread->status == THREADSTATUS_READY;
}), waiting_threads.end());
@@ -42,12 +42,11 @@ SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() {
auto candidate_threads = waiting_threads;
- // Eliminate all threads that are waiting on more than one object, and not all of them are ready
- candidate_threads.erase(std::remove_if(candidate_threads.begin(), candidate_threads.end(), [](SharedPtr<Thread> thread) -> bool {
- for (auto object : thread->wait_objects)
- if (object->ShouldWait())
- return true;
- return false;
+ // Eliminate all threads that are waiting on more than one object, and not all of said objects are ready
+ candidate_threads.erase(std::remove_if(candidate_threads.begin(), candidate_threads.end(), [](const SharedPtr<Thread>& thread) -> bool {
+ return std::any_of(thread->wait_objects.begin(), thread->wait_objects.end(), [](const SharedPtr<WaitObject>& object) -> bool {
+ return object->ShouldWait();
+ });
}), candidate_threads.end());
// Return the thread with the lowest priority value (The one with the highest priority)