Skip to content

Commit

Permalink
Merge pull request #1875 from malucard/quitting
Browse files Browse the repository at this point in the history
Fix quitting freeze
  • Loading branch information
nicolasnoble authored Mar 2, 2025
2 parents baad2c2 + 3446f9b commit f9b7526
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 27 deletions.
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,10 @@ vsprojects/packages
/modconv
/ps1-packer
/psyq-obj-parser
/pcsx.json
/memcard1.mcd
/memcard2.mcd

# Temporary files from pcsx itself
pcsx.json
pcsx.json.tmp
*.mcd

# FastBuild and msfastbuild stuff
Expand Down
51 changes: 29 additions & 22 deletions src/gui/gui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -892,28 +892,35 @@ void PCSX::GUI::close() {

void PCSX::GUI::saveCfg() {
if (g_system->getArgs().isTestModeEnabled()) return;
std::ofstream cfg(g_system->getPersistentDir() / "pcsx.json");
json j;

if (m_fullscreen || glfwGetWindowAttrib(m_window, GLFW_ICONIFIED) > 0) {
m_glfwPosX = settings.get<WindowPosX>();
m_glfwPosY = settings.get<WindowPosY>();
m_glfwSizeX = settings.get<WindowSizeX>();
m_glfwSizeY = settings.get<WindowSizeY>();
m_glfwMaximized = settings.get<WindowMaximized>();
} else {
glfwGetWindowPos(m_window, &m_glfwPosX, &m_glfwPosY);
glfwGetWindowSize(m_window, &m_glfwSizeX, &m_glfwSizeY);
m_glfwMaximized = glfwGetWindowAttrib(m_window, GLFW_MAXIMIZED) != 0;
}

j["imgui"] = ImGui::SaveIniSettingsToMemory(nullptr);
j["SPU"] = PCSX::g_emulator->m_spu->getCfg();
j["emulator"] = PCSX::g_emulator->settings.serialize();
j["gui"] = settings.serialize();
j["loggers"] = m_log.serialize();
j["pads"] = PCSX::g_emulator->m_pads->getCfg();
cfg << std::setw(2) << j << std::endl;
std::filesystem::path cfgTmpPath = g_system->getPersistentDir() / "pcsx.json.tmp";
std::filesystem::path cfgPath = g_system->getPersistentDir() / "pcsx.json";
{
std::ofstream cfg(cfgTmpPath);
json j;

if (m_fullscreen || glfwGetWindowAttrib(m_window, GLFW_ICONIFIED) > 0) {
m_glfwPosX = settings.get<WindowPosX>();
m_glfwPosY = settings.get<WindowPosY>();
m_glfwSizeX = settings.get<WindowSizeX>();
m_glfwSizeY = settings.get<WindowSizeY>();
m_glfwMaximized = settings.get<WindowMaximized>();
} else {
glfwGetWindowPos(m_window, &m_glfwPosX, &m_glfwPosY);
glfwGetWindowSize(m_window, &m_glfwSizeX, &m_glfwSizeY);
m_glfwMaximized = glfwGetWindowAttrib(m_window, GLFW_MAXIMIZED) != 0;
}

j["imgui"] = ImGui::SaveIniSettingsToMemory(nullptr);
j["SPU"] = PCSX::g_emulator->m_spu->getCfg();
j["emulator"] = PCSX::g_emulator->settings.serialize();
j["gui"] = settings.serialize();
j["loggers"] = m_log.serialize();
j["pads"] = PCSX::g_emulator->m_pads->getCfg();
cfg << std::setw(2) << j << std::endl;
}
if (std::filesystem::copy_file(cfgTmpPath, cfgPath, std::filesystem::copy_options::overwrite_existing)) {
std::filesystem::remove(cfgTmpPath);
}
}

void PCSX::GUI::glfwKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) {
Expand Down
9 changes: 7 additions & 2 deletions src/main/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,9 @@ int pcsxMain(int argc, char **argv) {
// enabled as much as possible.
SystemImpl *system = new SystemImpl(args);
PCSX::g_system = system;
auto sigint = std::signal(SIGINT, [](auto signal) { PCSX::g_system->quit(-1); });
auto sigterm = std::signal(SIGTERM, [](auto signal) { PCSX::g_system->quit(-1); });
static std::atomic_bool scheduledQuit = false;
auto sigint = std::signal(SIGINT, [](auto signal) { scheduledQuit = true; });
auto sigterm = std::signal(SIGTERM, [](auto signal) { scheduledQuit = true; });
#ifndef _WIN32
signal(SIGPIPE, SIG_IGN);
#endif
Expand Down Expand Up @@ -454,6 +455,10 @@ runner.init({
// when the emulator is paused.
s_ui->update();
}
if (scheduledQuit) {
PCSX::g_system->quit(-1);
return exitCode;
}
}
} catch (...) {
// This will ensure we don't do certain cleanups that are awaiting other tasks,
Expand Down

0 comments on commit f9b7526

Please sign in to comment.