qt: prevent reentrant shutdown

This commit is contained in:
Liam 2022-12-24 17:31:34 -05:00
parent c86e21abe4
commit cb7f0c2ec3
2 changed files with 12 additions and 5 deletions

View file

@ -1785,9 +1785,9 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t
OnStartGame(); OnStartGame();
} }
void GMainWindow::OnShutdownBegin() { bool GMainWindow::OnShutdownBegin() {
if (!emulation_running) { if (!emulation_running) {
return; return false;
} }
if (ui->action_Fullscreen->isChecked()) { if (ui->action_Fullscreen->isChecked()) {
@ -1799,6 +1799,10 @@ void GMainWindow::OnShutdownBegin() {
// Disable unlimited frame rate // Disable unlimited frame rate
Settings::values.use_speed_limit.SetValue(true); Settings::values.use_speed_limit.SetValue(true);
if (system->IsShuttingDown()) {
return false;
}
system->SetShuttingDown(true); system->SetShuttingDown(true);
discord_rpc->Pause(); discord_rpc->Pause();
@ -1817,6 +1821,8 @@ void GMainWindow::OnShutdownBegin() {
ui->action_Pause->setEnabled(false); ui->action_Pause->setEnabled(false);
ui->action_Restart->setEnabled(false); ui->action_Restart->setEnabled(false);
ui->action_Stop->setEnabled(false); ui->action_Stop->setEnabled(false);
return true;
} }
void GMainWindow::OnShutdownBeginDialog() { void GMainWindow::OnShutdownBeginDialog() {
@ -3003,9 +3009,10 @@ void GMainWindow::OnStopGame() {
return; return;
} }
OnShutdownBegin(); if (OnShutdownBegin()) {
OnShutdownBeginDialog(); OnShutdownBeginDialog();
} }
}
void GMainWindow::OnLoadComplete() { void GMainWindow::OnLoadComplete() {
loading_screen->OnLoadComplete(); loading_screen->OnLoadComplete();

View file

@ -336,7 +336,7 @@ private slots:
void OnReinitializeKeys(ReinitializeKeyBehavior behavior); void OnReinitializeKeys(ReinitializeKeyBehavior behavior);
void OnLanguageChanged(const QString& locale); void OnLanguageChanged(const QString& locale);
void OnMouseActivity(); void OnMouseActivity();
void OnShutdownBegin(); bool OnShutdownBegin();
void OnShutdownBeginDialog(); void OnShutdownBeginDialog();
void OnEmulationStopped(); void OnEmulationStopped();
void OnEmulationStopTimeExpired(); void OnEmulationStopTimeExpired();