summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-08-26 03:55:44 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-08-26 04:56:05 +0200
commitccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a (patch)
treeaab98e92a63c4ed5a3fcabef34dce8f8445278cf /src
parentMerge pull request #4572 from lioncash/xbyak (diff)
downloadyuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar.gz
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar.bz2
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar.lz
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar.xz
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.tar.zst
yuzu-ccdd84a778244eb1ebbf7ea6e39d5fca79f16e2a.zip
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/scheduler.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp
index a4b234424..5cbd3b912 100644
--- a/src/core/hle/kernel/scheduler.cpp
+++ b/src/core/hle/kernel/scheduler.cpp
@@ -756,7 +756,11 @@ void Scheduler::SwitchToCurrent() {
current_thread = selected_thread;
is_context_switch_pending = false;
}
- while (!is_context_switch_pending) {
+ const auto is_switch_pending = [this] {
+ std::scoped_lock lock{guard};
+ return is_context_switch_pending;
+ };
+ do {
if (current_thread != nullptr && !current_thread->IsHLEThread()) {
current_thread->context_guard.lock();
if (!current_thread->IsRunnable()) {
@@ -775,7 +779,7 @@ void Scheduler::SwitchToCurrent() {
next_context = &idle_thread->GetHostContext();
}
Common::Fiber::YieldTo(switch_fiber, *next_context);
- }
+ } while (!is_switch_pending());
}
}