From fc2266130b450952777cd3a9e47adb36960de8e7 Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 5 Jan 2017 14:14:22 -0500 Subject: Kernel: Don't attempt to yield execution in SleepThread(0) if there are no available threads to run. With this we avoid an useless temporary deschedule of the current thread. --- src/core/hle/kernel/thread.cpp | 4 ++++ src/core/hle/kernel/thread.h | 5 +++++ 2 files changed, 9 insertions(+) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 9109bd10b..6cd9ff327 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -556,6 +556,10 @@ SharedPtr SetupMainThread(u32 entry_point, s32 priority) { return thread; } +bool HaveReadyThreads() { + return ready_queue.get_first() != nullptr; +} + void Reschedule() { PriorityBoostStarvedThreads(); diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index af72b76ea..13a29a044 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -218,6 +218,11 @@ private: */ SharedPtr SetupMainThread(u32 entry_point, s32 priority); +/** + * Returns whether there are any threads that are ready to run. + */ +bool HaveReadyThreads(); + /** * Reschedules to the next available thread (call after current thread is suspended) */ -- cgit v1.2.3