Ver Fonte

Merge pull request #1762 from bunnei/global

hle: Get rid of direct global access to g_reschedule
bunnei há 10 anos atrás
pai
commit
75cbfeee58
4 ficheiros alterados com 21 adições e 8 exclusões
  1. 1 1
      src/core/core.cpp
  2. 16 4
      src/core/hle/hle.cpp
  3. 2 2
      src/core/hle/hle.h
  4. 2 1
      src/core/hle/kernel/thread.cpp

+ 1 - 1
src/core/core.cpp

@@ -51,7 +51,7 @@ void RunLoop(int tight_loop) {
     }
 
     HW::Update();
-    if (HLE::g_reschedule) {
+    if (HLE::IsReschedulePending()) {
         Kernel::Reschedule();
     }
 }

+ 16 - 4
src/core/hle/hle.cpp

@@ -12,9 +12,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.");
@@ -27,13 +31,21 @@ void Reschedule(const char *reason) {
 
     Core::g_app_core->PrepareReschedule();
 
-    g_reschedule = true;
+    reschedule = true;
+}
+
+bool IsReschedulePending() {
+    return reschedule;
+}
+
+void DoneRescheduling() {
+    reschedule = false;
 }
 
 void Init() {
     Service::Init();
 
-    g_reschedule = false;
+    reschedule = false;
 
     LOG_DEBUG(Kernel, "initialized OK");
 }

+ 2 - 2
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 IsReschedulePending();
+void DoneRescheduling();
 
 void Init();
 void Shutdown();

+ 2 - 1
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)