Fix #9879 and fix firmware confirmation dialog when auto-start is disabled

This commit is contained in:
Eladash 2021-03-31 21:17:40 +03:00 committed by Ivan
parent e9a45a2f45
commit 55c98bfaef

View file

@ -1690,13 +1690,7 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
return game_boot_result::invalid_file_or_folder;
}
ensure(IsReady());
if (m_force_boot || g_cfg.misc.autostart)
{
if (ppu_exec == elf_error::ok)
{
if (!fs::is_file(g_cfg.vfs.get_dev_flash() + "sys/external/liblv2.sprx"))
if (ppu_exec == elf_error::ok && !fs::is_file(g_cfg.vfs.get_dev_flash() + "sys/external/liblv2.sprx"))
{
const auto libs = g_cfg.core.libraries_control.get_set();
@ -1709,6 +1703,7 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
return libs.count(std::string(lib.first) + ":lle") || (!lib.second && !libs.count(std::string(lib.first) + ":hle"));
}))
{
SetForceBoot(true);
Stop();
CallAfter([this]()
@ -1720,10 +1715,21 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
}
}
const bool autostart = (std::exchange(m_force_boot, false) || g_cfg.misc.autostart);
if (IsReady())
{
if (autostart)
{
Run(true);
}
m_force_boot = false;
}
else
{
ensure(m_state == system_state::paused);
Resume(); // Remove paused flag from threads
m_state = system_state::ready;
GetCallbacks().on_ready();
}
return game_boot_result::no_errors;
@ -1768,7 +1774,10 @@ bool Emulator::Pause()
// Try to pause
if (!m_state.compare_and_swap_test(system_state::running, system_state::paused))
{
return m_state.compare_and_swap_test(system_state::ready, system_state::paused);
if (!m_state.compare_and_swap_test(system_state::ready, system_state::paused))
{
return false;
}
}
// Signal profilers to print results (if enabled)