emu_thread: properly force shutdown for unresponsive guest programs

This commit is contained in:
Liam 2022-12-12 21:38:20 -05:00
parent f44c60321e
commit 179adee396
2 changed files with 5 additions and 12 deletions

View File

@ -11,7 +11,6 @@
#include <QImage>
#include <QStringList>
#include <QThread>
#include <QTimer>
#include <QTouchEvent>
#include <QWidget>
@ -85,17 +84,9 @@ public:
}
/**
* Requests for the emulation thread to stop running
* Requests for the emulation thread to immediately stop running
*/
void RequestStop() {
QTimer::singleShot(5000, this, &EmuThread::ForceStop);
}
private slots:
void ForceStop() {
if (!IsRunning()) {
return;
}
LOG_WARNING(Frontend, "Force stopping EmuThread");
stop_source.request_stop();
SetRunning(false);

View File

@ -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;