diff options
author | Subv <subv2112@gmail.com> | 2017-01-02 19:53:10 +0100 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2017-01-04 21:58:47 +0100 |
commit | b6a0355568ee327bef8957b9a2498897b96e1278 (patch) | |
tree | c2b4ac0c55ecfc2c60495e85e88e64c0f2bb6d8f /src/core/hle/kernel/kernel.cpp | |
parent | Kernel/Mutex: Implemented priority inheritance. (diff) | |
download | yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar.gz yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar.bz2 yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar.lz yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar.xz yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.tar.zst yuzu-b6a0355568ee327bef8957b9a2498897b96e1278.zip |
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r-- | src/core/hle/kernel/kernel.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index ef9dbafa5..6f61d526a 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -3,7 +3,6 @@ // Refer to the license.txt file included. #include <algorithm> -#include <boost/range/algorithm_ext/erase.hpp> #include "common/assert.h" #include "common/logging/log.h" #include "core/hle/config_mem.h" @@ -34,10 +33,17 @@ void WaitObject::RemoveWaitingThread(Thread* thread) { SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { // Remove the threads that are ready or already running from our waitlist - boost::range::remove_erase_if(waiting_threads, [](const SharedPtr<Thread>& thread) { - return thread->status == THREADSTATUS_RUNNING || thread->status == THREADSTATUS_READY || - thread->status == THREADSTATUS_DEAD; - }); + auto to_remove = waiting_threads.end(); + do { + to_remove = std::find_if(waiting_threads.begin(), waiting_threads.end(), + [](const SharedPtr<Thread>& thread) { + return thread->status == THREADSTATUS_RUNNING || + thread->status == THREADSTATUS_READY || + thread->status == THREADSTATUS_DEAD; + }); + // Call RemoveWaitingThread so that child classes can override the behavior. + RemoveWaitingThread(to_remove->get()); + } while (to_remove != waiting_threads.end()); Thread* candidate = nullptr; s32 candidate_priority = THREADPRIO_LOWEST + 1; @@ -49,9 +55,10 @@ SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { if (ShouldWait(thread.get())) continue; - bool ready_to_run = - std::none_of(thread->wait_objects.begin(), thread->wait_objects.end(), - [&thread](const SharedPtr<WaitObject>& object) { return object->ShouldWait(thread.get()); }); + bool 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; |