summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2016-03-21 07:48:40 +0100
committerLioncash <mathew1800@gmail.com>2016-03-21 07:57:12 +0100
commit6b7ebb3f82ae9674f2a4d66e870a53102b412003 (patch)
tree6b6f018c35d6c8245a2944bca6f5d1209410490b
parentMerge pull request #1302 from Subv/save_fix (diff)
downloadyuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar.gz
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar.bz2
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar.lz
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar.xz
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.tar.zst
yuzu-6b7ebb3f82ae9674f2a4d66e870a53102b412003.zip
-rw-r--r--src/core/core.cpp2
-rw-r--r--src/core/hle/hle.cpp20
-rw-r--r--src/core/hle/hle.h4
-rw-r--r--src/core/hle/kernel/thread.cpp3
4 files changed, 21 insertions, 8 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 84d6c392e..609ca860d 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -52,7 +52,7 @@ void RunLoop(int tight_loop) {
}
HW::Update();
- if (HLE::g_reschedule) {
+ if (HLE::RescheduleIsPending()) {
Kernel::Reschedule();
}
}
diff --git a/src/core/hle/hle.cpp b/src/core/hle/hle.cpp
index 331b1b22a..3b1369800 100644
--- a/src/core/hle/hle.cpp
+++ b/src/core/hle/hle.cpp
@@ -14,9 +14,13 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
-namespace HLE {
+namespace {
+
+bool reschedule; ///< If true, immediately reschedules the CPU to a new thread
-bool g_reschedule; ///< If true, immediately reschedules the CPU to a new thread
+}
+
+namespace HLE {
void Reschedule(const char *reason) {
DEBUG_ASSERT_MSG(reason != nullptr && strlen(reason) < 256, "Reschedule: Invalid or too long reason.");
@@ -29,13 +33,21 @@ void Reschedule(const char *reason) {
Core::g_app_core->PrepareReschedule();
- g_reschedule = true;
+ reschedule = true;
+}
+
+bool RescheduleIsPending() {
+ return reschedule;
+}
+
+void DoneRescheduling() {
+ reschedule = false;
}
void Init() {
Service::Init();
- g_reschedule = false;
+ reschedule = false;
LOG_DEBUG(Kernel, "initialized OK");
}
diff --git a/src/core/hle/hle.h b/src/core/hle/hle.h
index e0b97797c..58dffe587 100644
--- a/src/core/hle/hle.h
+++ b/src/core/hle/hle.h
@@ -13,9 +13,9 @@ const Handle INVALID_HANDLE = 0;
namespace HLE {
-extern bool g_reschedule; ///< If true, immediately reschedules the CPU to a new thread
-
void Reschedule(const char *reason);
+bool RescheduleIsPending();
+void DoneRescheduling();
void Init();
void Shutdown();
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index bf32f653d..6dc95d0f1 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -483,7 +483,8 @@ void Reschedule() {
Thread* cur = GetCurrentThread();
Thread* next = PopNextReadyThread();
- HLE::g_reschedule = false;
+
+ HLE::DoneRescheduling();
// Don't bother switching to the same thread
if (next == cur)