summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
authorJan Dalheimer <jan@dalheimer.de>2014-02-16 08:54:52 +0100
committerJan Dalheimer <jan@dalheimer.de>2014-02-16 08:54:52 +0100
commit82b35b5445d88d67c89c6547b24053d31dc35b9c (patch)
tree333b6a40d558ab3022f7e68297f9b14863c854bc /logic
parent7ceb2cacb129d5924087f616cfc0b949689ed4fe (diff)
downloadMultiMC-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.cpp15
-rw-r--r--logic/profiler/BaseProfiler.h4
-rw-r--r--logic/profiler/JProfiler.cpp11
-rw-r--r--logic/profiler/JVisualVM.cpp12
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)