summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/thread.cpp
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-09-10 10:23:43 -0400
committerGravatar FernandoS272019-10-15 11:55:13 -0400
commit103f3a2fe51a09caf3f478226b6957b23c6eff79 (patch)
tree5304773e043ed3db6a55e4666fc25143560396af /src/core/hle/kernel/thread.cpp
parentKernel: Style and Corrections (diff)
downloadyuzu-103f3a2fe51a09caf3f478226b6957b23c6eff79.tar.gz
yuzu-103f3a2fe51a09caf3f478226b6957b23c6eff79.tar.xz
yuzu-103f3a2fe51a09caf3f478226b6957b23c6eff79.zip
Scheduler: Add protections for Yield bombing
In case of redundant yields, the scheduler will now idle the core for it's timeslice, in order to avoid continuously yielding the same thing over and over.
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
-rw-r--r--src/core/hle/kernel/thread.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 8cf0a7ec7..ae62609e3 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -373,19 +373,19 @@ void Thread::Sleep(s64 nanoseconds) {
373 WakeAfterDelay(nanoseconds); 373 WakeAfterDelay(nanoseconds);
374} 374}
375 375
376void Thread::YieldSimple() { 376bool Thread::YieldSimple() {
377 auto& scheduler = kernel.GlobalScheduler(); 377 auto& scheduler = kernel.GlobalScheduler();
378 scheduler.YieldThread(this); 378 return scheduler.YieldThread(this);
379} 379}
380 380
381void Thread::YieldAndBalanceLoad() { 381bool Thread::YieldAndBalanceLoad() {
382 auto& scheduler = kernel.GlobalScheduler(); 382 auto& scheduler = kernel.GlobalScheduler();
383 scheduler.YieldThreadAndBalanceLoad(this); 383 return scheduler.YieldThreadAndBalanceLoad(this);
384} 384}
385 385
386void Thread::YieldAndWaitForLoadBalancing() { 386bool Thread::YieldAndWaitForLoadBalancing() {
387 auto& scheduler = kernel.GlobalScheduler(); 387 auto& scheduler = kernel.GlobalScheduler();
388 scheduler.YieldThreadAndWaitForLoadBalancing(this); 388 return scheduler.YieldThreadAndWaitForLoadBalancing(this);
389} 389}
390 390
391void Thread::SetSchedulingStatus(ThreadSchedStatus new_status) { 391void Thread::SetSchedulingStatus(ThreadSchedStatus new_status) {