diff options
author | Subv <subv2112@gmail.com> | 2016-12-04 15:58:36 +0100 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2016-12-04 15:58:36 +0100 |
commit | bdad00c73f46106ba78995bdde1b50349e940b09 (patch) | |
tree | 1c39ab11c8e995f2cbba8a5f602ab64819085b22 /src/core/hle/kernel/kernel.cpp | |
parent | Threading: Reworked the way our scheduler works. (diff) | |
download | yuzu-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 'src/core/hle/kernel/kernel.cpp')
-rw-r--r-- | src/core/hle/kernel/kernel.cpp | 13 |
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) |