Audit uses of IsRunning and GetState
Some pieces of code are calling IsRunning because there's some particular action that only makes sense when emulation is running, for instance showing the state of the emulated CPU. IsRunning is appropriate to use for this. Then there are pieces of code that are calling IsRunning because there's some particular thing they must avoid doing e.g. when the CPU thread is running or IOS is running. IsRunning isn't quite appropriate for this. Such code should also be checking for the states Starting and Stopping. Keep in mind that: * When the state is Starting, the state can asynchronously change to Running at any time. * When we try to stop the core, the state gets set to Stopping before we take any action to actually stop things. This commit adds a new method Core::IsUninitialized, and changes all callers of IsRunning and GetState that look to me like they should be changed.
This commit is contained in:
1 parent
962230f91e
commit
72cf2bdb87
33 files changed
+133
-105
No files matched your search
@@ -33,7 +33,7 @@ namespace ConfigLoaders
|
||||
{
|
||||
void SaveToSYSCONF(Config::LayerType layer, std::function<bool(const Config::Location&)> predicate)
|
||||
{
|
||||
if (Core::IsRunning(Core::System::GetInstance()))
|
||||
if (!Core::IsUninitialized(Core::System::GetInstance()))
|
||||
return;
|
||||
|
||||
IOS::HLE::Kernel ios;
|
||||
@@ -183,7 +183,7 @@ public:
|
||||
private:
|
||||
void LoadFromSYSCONF(Config::Layer* layer)
|
||||
{
|
||||
if (Core::IsRunning(Core::System::GetInstance()))
|
||||
if (!Core::IsUninitialized(Core::System::GetInstance()))
|
||||
return;
|
||||
|
||||
IOS::HLE::Kernel ios;
|
||||
|
||||
@@ -211,6 +211,11 @@ bool IsRunningOrStarting(Core::System& system)
|
||||
return state == State::Running || state == State::Starting;
|
||||
}
|
||||
|
||||
bool IsUninitialized(Core::System& system)
|
||||
{
|
||||
return s_state.load() == State::Uninitialized;
|
||||
}
|
||||
|
||||
bool IsCPUThread()
|
||||
{
|
||||
return tls_is_cpu_thread;
|
||||
@@ -237,7 +242,7 @@ bool Init(Core::System& system, std::unique_ptr<BootParameters> boot, const Wind
|
||||
{
|
||||
if (s_emu_thread.joinable())
|
||||
{
|
||||
if (IsRunning(system))
|
||||
if (!IsUninitialized(system))
|
||||
{
|
||||
PanicAlertFmtT("Emu Thread already running");
|
||||
return false;
|
||||
|
||||
@@ -134,8 +134,13 @@ void UndeclareAsHostThread();
|
||||
|
||||
std::string StopMessage(bool main_thread, std::string_view message);
|
||||
|
||||
// Returns true when GetState returns Running or Paused.
|
||||
bool IsRunning(Core::System& system);
|
||||
// Returns true when GetState returns Starting, Running or Paused.
|
||||
bool IsRunningOrStarting(Core::System& system);
|
||||
// Returns true when GetState returns Uninitialized.
|
||||
bool IsUninitialized(Core::System& system);
|
||||
|
||||
bool IsCPUThread(); // this tells us whether we are the CPU thread.
|
||||
bool IsGPUThread();
|
||||
bool IsHostThread();
|
||||
|
||||
Reference in new issue
Block a user