From f44c60321ec767b6e881160d4960345d678edf78 Mon Sep 17 00:00:00 2001 From: Gus Caplan Date: Mon, 18 Jul 2022 00:41:29 -0700 Subject: let games gracefully exit --- src/yuzu/main.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/yuzu/main.cpp') diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index b11b26f7b..b38957d9a 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1707,9 +1707,6 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t system->RegisterExecuteProgramCallback( [this](std::size_t program_index_) { render_window->ExecuteProgram(program_index_); }); - // Register an Exit callback such that Core can exit the currently running application. - system->RegisterExitCallback([this]() { render_window->Exit(); }); - connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame); connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity); // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views @@ -1793,6 +1790,8 @@ void GMainWindow::ShutdownGame() { system->SetShuttingDown(true); system->DetachDebugger(); discord_rpc->Pause(); + + RequestGameExit(); emu_thread->RequestStop(); emit EmulationStopping(); -- cgit v1.2.3 From 179adee396e6b8480d52be5314979830beebfbc1 Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 12 Dec 2022 21:38:20 -0500 Subject: emu_thread: properly force shutdown for unresponsive guest programs --- src/yuzu/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/yuzu/main.cpp') diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index b38957d9a..b3ae03eaf 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1792,12 +1792,14 @@ void GMainWindow::ShutdownGame() { discord_rpc->Pause(); RequestGameExit(); - emu_thread->RequestStop(); emit EmulationStopping(); // Wait for emulation thread to complete and delete it - emu_thread->wait(); + if (!emu_thread->wait(5000)) { + emu_thread->ForceStop(); + emu_thread->wait(); + } emu_thread = nullptr; emulation_running = false; -- cgit v1.2.3