From cb7f0c2ec367ae8b480cf9ca7b1e3df6a4d0425e Mon Sep 17 00:00:00 2001 From: Liam Date: Sat, 24 Dec 2022 17:31:34 -0500 Subject: qt: prevent reentrant shutdown --- src/yuzu/main.cpp | 15 +++++++++++---- src/yuzu/main.h | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 6121711e0..524650144 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1785,9 +1785,9 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t OnStartGame(); } -void GMainWindow::OnShutdownBegin() { +bool GMainWindow::OnShutdownBegin() { if (!emulation_running) { - return; + return false; } if (ui->action_Fullscreen->isChecked()) { @@ -1799,6 +1799,10 @@ void GMainWindow::OnShutdownBegin() { // Disable unlimited frame rate Settings::values.use_speed_limit.SetValue(true); + if (system->IsShuttingDown()) { + return false; + } + system->SetShuttingDown(true); discord_rpc->Pause(); @@ -1817,6 +1821,8 @@ void GMainWindow::OnShutdownBegin() { ui->action_Pause->setEnabled(false); ui->action_Restart->setEnabled(false); ui->action_Stop->setEnabled(false); + + return true; } void GMainWindow::OnShutdownBeginDialog() { @@ -3003,8 +3009,9 @@ void GMainWindow::OnStopGame() { return; } - OnShutdownBegin(); - OnShutdownBeginDialog(); + if (OnShutdownBegin()) { + OnShutdownBeginDialog(); + } } void GMainWindow::OnLoadComplete() { diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 95220b063..db318485d 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -336,7 +336,7 @@ private slots: void OnReinitializeKeys(ReinitializeKeyBehavior behavior); void OnLanguageChanged(const QString& locale); void OnMouseActivity(); - void OnShutdownBegin(); + bool OnShutdownBegin(); void OnShutdownBeginDialog(); void OnEmulationStopped(); void OnEmulationStopTimeExpired(); -- cgit v1.2.3