From 29596dec25de332bf45f872788c5916d62537468 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 17 Aug 2025 04:27:09 +0500 Subject: [PATCH] Manager: Show a message box if a VM process crashes --- src/qt/qt_vmmanager_main.cpp | 6 +++++- src/qt/qt_vmmanager_system.cpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index d2ce2f025..0e48978b0 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -294,6 +294,7 @@ illegal_chars: QMessageBox msgbox(QMessageBox::Warning, tr("Warning"), tr("Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?").arg(selected_sysconfig->displayName), QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::No, parent); msgbox.exec(); if (msgbox.result() == QMessageBox::Yes) { + disconnect(selected_sysconfig->process, QOverload::of(&QProcess::finished), nullptr, nullptr); selected_sysconfig->process->kill(); } }); @@ -616,13 +617,16 @@ VMManagerMain::addNewSystem(const QString &name, const QString &dir, const QStri const auto new_system = new VMManagerSystem(newSystemConfigFile.absoluteFilePath()); new_system->launchSettings(); // Handle this in a closure so we can capture the temporary new_system object + disconnect(new_system->process, QOverload::of(&QProcess::finished), nullptr, nullptr); connect(new_system->process, QOverload::of(&QProcess::finished), [=](const int exitCode, const QProcess::ExitStatus exitStatus) { if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qInfo().nospace().noquote() << "Abnormal program termination while creating new system: exit code " << exitCode << ", exit status " << exitStatus; qInfo() << "Not adding system due to errors"; + QString errMsg = tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg( + (!displayName.isEmpty() ? displayName : name), QString::number(exitCode)); QMessageBox::critical(this, tr("Error adding system"), - tr("Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added.").arg(QString::number(exitCode), exitStatus)); + QString("%1\n\n%2").arg(errMsg, tr("The system will not be added."))); delete new_system; return; } diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 2168f2e4d..618ceac99 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include "qt_util.hpp" @@ -445,6 +446,8 @@ VMManagerSystem::launchMainProcess() { [=](const int exitCode, const QProcess::ExitStatus exitStatus){ if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qInfo().nospace().noquote() << "Abnormal program termination while launching main process: exit code " << exitCode << ", exit status " << exitStatus; + QMessageBox::critical(this, tr("Virtual machine crash"), + tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg(displayName, QString::number(exitCode))); return; } }); @@ -498,6 +501,8 @@ VMManagerSystem::launchSettings() { [=](const int exitCode, const QProcess::ExitStatus exitStatus){ if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qInfo().nospace().noquote() << "Abnormal program termination while launching settings: exit code " << exitCode << ", exit status " << exitStatus; + QMessageBox::critical(this, tr("Virtual machine crash"), + tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg(displayName, QString::number(exitCode))); return; }