mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-27 09:12:46 +01:00
hle: Get rid of global access to g_reschedule
This shouldn't be directly exposed if there's already a partial API that operates on it. We can just provide the rest of that API.
This commit is contained in:
parent
b83e95727f
commit
6b7ebb3f82
4 changed files with 21 additions and 8 deletions
|
@ -52,7 +52,7 @@ void RunLoop(int tight_loop) {
|
||||||
}
|
}
|
||||||
|
|
||||||
HW::Update();
|
HW::Update();
|
||||||
if (HLE::g_reschedule) {
|
if (HLE::RescheduleIsPending()) {
|
||||||
Kernel::Reschedule();
|
Kernel::Reschedule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,9 +14,13 @@
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
namespace HLE {
|
namespace {
|
||||||
|
|
||||||
bool g_reschedule; ///< If true, immediately reschedules the CPU to a new thread
|
bool reschedule; ///< If true, immediately reschedules the CPU to a new thread
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace HLE {
|
||||||
|
|
||||||
void Reschedule(const char *reason) {
|
void Reschedule(const char *reason) {
|
||||||
DEBUG_ASSERT_MSG(reason != nullptr && strlen(reason) < 256, "Reschedule: Invalid or too long 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();
|
Core::g_app_core->PrepareReschedule();
|
||||||
|
|
||||||
g_reschedule = true;
|
reschedule = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RescheduleIsPending() {
|
||||||
|
return reschedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoneRescheduling() {
|
||||||
|
reschedule = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init() {
|
void Init() {
|
||||||
Service::Init();
|
Service::Init();
|
||||||
|
|
||||||
g_reschedule = false;
|
reschedule = false;
|
||||||
|
|
||||||
LOG_DEBUG(Kernel, "initialized OK");
|
LOG_DEBUG(Kernel, "initialized OK");
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ const Handle INVALID_HANDLE = 0;
|
||||||
|
|
||||||
namespace HLE {
|
namespace HLE {
|
||||||
|
|
||||||
extern bool g_reschedule; ///< If true, immediately reschedules the CPU to a new thread
|
|
||||||
|
|
||||||
void Reschedule(const char *reason);
|
void Reschedule(const char *reason);
|
||||||
|
bool RescheduleIsPending();
|
||||||
|
void DoneRescheduling();
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
|
@ -483,7 +483,8 @@ void Reschedule() {
|
||||||
|
|
||||||
Thread* cur = GetCurrentThread();
|
Thread* cur = GetCurrentThread();
|
||||||
Thread* next = PopNextReadyThread();
|
Thread* next = PopNextReadyThread();
|
||||||
HLE::g_reschedule = false;
|
|
||||||
|
HLE::DoneRescheduling();
|
||||||
|
|
||||||
// Don't bother switching to the same thread
|
// Don't bother switching to the same thread
|
||||||
if (next == cur)
|
if (next == cur)
|
||||||
|
|
Loading…
Reference in a new issue