Qt: stop all game list threads before updating

This commit is contained in:
Megamouse 2025-03-11 19:07:07 +01:00
parent ff21a05c96
commit e752e66cb8
5 changed files with 17 additions and 0 deletions

View file

@ -229,6 +229,11 @@ void game_list_frame::LoadSettings()
}
game_list_frame::~game_list_frame()
{
StopAllThreads();
}
void game_list_frame::StopAllThreads()
{
WaitAndAbortSizeCalcThreads();
WaitAndAbortRepaintThreads();

View file

@ -35,6 +35,8 @@ public:
explicit game_list_frame(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<emu_settings> emu_settings, std::shared_ptr<persistent_settings> persistent_settings, QWidget* parent = nullptr);
~game_list_frame();
void StopAllThreads();
/** Refresh the gamelist with/without loading game data from files. Public so that main frame can refresh after vfs or install */
void Refresh(const bool from_drive = false, const std::vector<std::string>& serials_to_remove_from_yml = {}, const bool scroll_after = true);

View file

@ -307,6 +307,13 @@ bool main_window::Init([[maybe_unused]] bool with_cli_boot)
ui->menuBar->cornerWidget()->setVisible(update_available);
}
});
connect(&m_updater, &update_manager::signal_about_to_terminate, this, [this]()
{
if (m_game_list_frame)
{
m_game_list_frame->StopAllThreads();
}
});
#ifdef RPCS3_UPDATE_SUPPORTED
if (const auto update_value = m_gui_settings->GetValue(gui::m_check_upd_start).toString(); update_value != gui::update_off)

View file

@ -755,6 +755,8 @@ bool update_manager::handle_rpcs3(const QByteArray& data, bool auto_accept)
m_gui_settings->sync(); // Make sure to sync before terminating RPCS3
}
Q_EMIT signal_about_to_terminate();
Emu.GracefulShutdown(false);
Emu.CleanUp();

View file

@ -45,4 +45,5 @@ public:
Q_SIGNALS:
void signal_update_available(bool update_available);
void signal_about_to_terminate();
};