From c60db13af73523c08353f819cc2a8441a7ddbada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 8 Aug 2016 09:35:39 +0200 Subject: NOISSUE Do not kill running instances when MultiMC shuts down --- api/logic/launch/LoggedProcess.cpp | 13 +++++++++++++ api/logic/launch/LoggedProcess.h | 7 +++++-- api/logic/minecraft/launch/DirectJavaLaunch.cpp | 3 +++ api/logic/minecraft/launch/LauncherPartLaunch.cpp | 3 +++ 4 files changed, 24 insertions(+), 2 deletions(-) (limited to 'api') diff --git a/api/logic/launch/LoggedProcess.cpp b/api/logic/launch/LoggedProcess.cpp index 88ca40aa..f89b4acc 100644 --- a/api/logic/launch/LoggedProcess.cpp +++ b/api/logic/launch/LoggedProcess.cpp @@ -12,6 +12,14 @@ LoggedProcess::LoggedProcess(QObject *parent) : QProcess(parent) connect(this, &QProcess::stateChanged, this, &LoggedProcess::on_stateChange); } +LoggedProcess::~LoggedProcess() +{ + if(m_is_detachable) + { + setProcessState(QProcess::NotRunning); + } +} + QStringList reprocess(const QByteArray & data, QString & leftover) { QString str = leftover + QString::fromLocal8Bit(data); @@ -161,3 +169,8 @@ qint64 LoggedProcess::processId() const return pid(); #endif } + +void LoggedProcess::setDetachable(bool detachable) +{ + m_is_detachable = detachable; +} diff --git a/api/logic/launch/LoggedProcess.h b/api/logic/launch/LoggedProcess.h index baa53d79..c4e5c52c 100644 --- a/api/logic/launch/LoggedProcess.h +++ b/api/logic/launch/LoggedProcess.h @@ -38,13 +38,15 @@ public: }; public: - explicit LoggedProcess(QObject* parent = 0); - virtual ~LoggedProcess() {}; + explicit LoggedProcess(QObject* parent = 0); + virtual ~LoggedProcess(); State state() const; int exitCode() const; qint64 processId() const; + void setDetachable(bool detachable); + signals: void log(QStringList lines, MessageLevel::Enum level); void stateChanged(LoggedProcess::State state); @@ -73,4 +75,5 @@ private: State m_state = NotRunning; int m_exit_code = 0; bool m_is_aborting = false; + bool m_is_detachable = false; }; diff --git a/api/logic/minecraft/launch/DirectJavaLaunch.cpp b/api/logic/minecraft/launch/DirectJavaLaunch.cpp index 1f1fb414..1f82a3f8 100644 --- a/api/logic/minecraft/launch/DirectJavaLaunch.cpp +++ b/api/logic/minecraft/launch/DirectJavaLaunch.cpp @@ -51,6 +51,9 @@ void DirectJavaLaunch::executeTask() m_process.setProcessEnvironment(instance->createEnvironment()); + // make detachable - this will keep the process running even if the object is destroyed + m_process.setDetachable(true); + auto mcArgs = minecraftInstance->processMinecraftArgs(m_session); args.append(mcArgs); diff --git a/api/logic/minecraft/launch/LauncherPartLaunch.cpp b/api/logic/minecraft/launch/LauncherPartLaunch.cpp index bc71fe28..398b5515 100644 --- a/api/logic/minecraft/launch/LauncherPartLaunch.cpp +++ b/api/logic/minecraft/launch/LauncherPartLaunch.cpp @@ -40,6 +40,9 @@ void LauncherPartLaunch::executeTask() m_process.setProcessEnvironment(instance->createEnvironment()); + // make detachable - this will keep the process running even if the object is destroyed + m_process.setDetachable(true); + args << "-jar" << FS::PathCombine(QCoreApplication::applicationDirPath(), "jars", "NewLaunch.jar"); QString wrapperCommand = instance->getWrapperCommand(); -- cgit v1.2.3