diff options
author | Jan Dalheimer <jan@dalheimer.de> | 2014-02-16 08:54:52 +0100 |
---|---|---|
committer | Jan Dalheimer <jan@dalheimer.de> | 2014-02-16 08:54:52 +0100 |
commit | 82b35b5445d88d67c89c6547b24053d31dc35b9c (patch) | |
tree | 333b6a40d558ab3022f7e68297f9b14863c854bc /logic | |
parent | 7ceb2cacb129d5924087f616cfc0b949689ed4fe (diff) | |
download | MultiMC-82b35b5445d88d67c89c6547b24053d31dc35b9c.tar MultiMC-82b35b5445d88d67c89c6547b24053d31dc35b9c.tar.gz MultiMC-82b35b5445d88d67c89c6547b24053d31dc35b9c.tar.lz MultiMC-82b35b5445d88d67c89c6547b24053d31dc35b9c.tar.xz MultiMC-82b35b5445d88d67c89c6547b24053d31dc35b9c.zip |
Fix stuff. Make sure different ways of aborting profiling work.
Diffstat (limited to 'logic')
-rw-r--r-- | logic/profiler/BaseProfiler.cpp | 15 | ||||
-rw-r--r-- | logic/profiler/BaseProfiler.h | 4 | ||||
-rw-r--r-- | logic/profiler/JProfiler.cpp | 11 | ||||
-rw-r--r-- | logic/profiler/JVisualVM.cpp | 12 |
4 files changed, 40 insertions, 2 deletions
diff --git a/logic/profiler/BaseProfiler.cpp b/logic/profiler/BaseProfiler.cpp index 4765c67d..1a377818 100644 --- a/logic/profiler/BaseProfiler.cpp +++ b/logic/profiler/BaseProfiler.cpp @@ -19,6 +19,21 @@ void BaseProfiler::beginProfiling(MinecraftProcess *process) beginProfilingImpl(process); } +void BaseProfiler::abortProfiling() +{ + abortProfiling(); +} + +void BaseProfiler::abortProfilingImpl() +{ + if (!m_profilerProcess) + { + return; + } + m_profilerProcess->terminate(); + m_profilerProcess->deleteLater(); +} + qint64 BaseProfiler::pid(QProcess *process) { #ifdef Q_OS_WIN diff --git a/logic/profiler/BaseProfiler.h b/logic/profiler/BaseProfiler.h index 4c5f63fc..e0d1d5f6 100644 --- a/logic/profiler/BaseProfiler.h +++ b/logic/profiler/BaseProfiler.h @@ -17,16 +17,20 @@ public: public slots: void beginProfiling(MinecraftProcess *process); + void abortProfiling(); protected: BaseInstance *m_instance; + QProcess *m_profilerProcess; virtual void beginProfilingImpl(MinecraftProcess *process) = 0; + virtual void abortProfilingImpl(); qint64 pid(QProcess *process); signals: void readyToLaunch(const QString &message); + void abortLaunch(const QString &message); }; class BaseProfilerFactory diff --git a/logic/profiler/JProfiler.cpp b/logic/profiler/JProfiler.cpp index cec614ae..34f927ce 100644 --- a/logic/profiler/JProfiler.cpp +++ b/logic/profiler/JProfiler.cpp @@ -22,7 +22,16 @@ void JProfiler::beginProfilingImpl(MinecraftProcess *process) .absoluteFilePath("bin/jpenable")); connect(profiler, &QProcess::started, [this, port]() { emit readyToLaunch(tr("Listening on port: %1").arg(port)); }); - connect(profiler, SIGNAL(finished(int)), profiler, SLOT(deleteLater())); + connect(profiler, + static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), + [this](int exit, QProcess::ExitStatus status) + { + if (exit != 0 || status == QProcess::CrashExit) + { + emit abortLaunch(tr("Profiler aborted")); + } + m_profilerProcess->deleteLater(); + }); profiler->start(); } diff --git a/logic/profiler/JVisualVM.cpp b/logic/profiler/JVisualVM.cpp index 3850ff40..89098f73 100644 --- a/logic/profiler/JVisualVM.cpp +++ b/logic/profiler/JVisualVM.cpp @@ -19,8 +19,18 @@ void JVisualVM::beginProfilingImpl(MinecraftProcess *process) profiler->setProgram("jvisualvm"); connect(profiler, &QProcess::started, [this]() { emit readyToLaunch(tr("JVisualVM started")); }); - connect(profiler, SIGNAL(finished(int)), profiler, SLOT(deleteLater())); + connect(profiler, + static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), + [this](int exit, QProcess::ExitStatus status) + { + if (exit != 0 || status == QProcess::CrashExit) + { + emit abortLaunch(tr("Profiler aborted")); + } + m_profilerProcess->deleteLater(); + }); profiler->start(); + m_profilerProcess = profiler; } void JVisualVMFactory::registerSettings(SettingsObject *settings) |