aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2025-09-15 15:50:56 +0200
committerJarek Kobus <[email protected]>2025-09-17 11:33:52 +0000
commit6550577169725398b33c33fbb0f651a2ed127cd6 (patch)
tree072fdb341fff36a6b7f939e6533e9ec794adac52
parent303c1934241b33bcd81dac8ba3c26b1777dd6f6f (diff)
Ios: Fix stopping profiler
Change-Id: I9d7ddb6ab123cbd48cc6638b8a3f76985a988d0f Reviewed-by: Eike Ziller <[email protected]>
-rw-r--r--src/plugins/ios/iosrunner.cpp30
-rw-r--r--src/plugins/ios/iostoolhandler.cpp8
-rw-r--r--src/plugins/ios/iostoolhandler.h4
3 files changed, 30 insertions, 12 deletions
diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp
index 672144db751..b79f3a30296 100644
--- a/src/plugins/ios/iosrunner.cpp
+++ b/src/plugins/ios/iosrunner.cpp
@@ -576,7 +576,8 @@ static void handleIosToolStartedOnSimulator(
barrier->advance();
}
-static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl, const DebugInfo &debugInfo)
+static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl,
+ const DebugInfo &debugInfo, bool setupCanceler = true)
{
stopRunningRunControl(runControl);
const IosDeviceTypeAspect::Data *data = runControl->aspectData<IosDeviceTypeAspect>();
@@ -596,9 +597,9 @@ static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl,
};
const auto onIosToolSetup = [runControl, debugInfo, bundleDir, deviceType, device,
- barrier](IosToolRunner &runner) {
+ setupCanceler, barrier](IosToolRunner &runner) {
runner.setDeviceType(deviceType);
- runner.setStartHandler([runControl, debugInfo, bundleDir, device,
+ runner.setStartHandler([runControl, debugInfo, bundleDir, device, setupCanceler,
barrier = barrier.activeStorage()](IosToolHandler *handler) {
const auto messageHandler = [runControl](const QString &message) {
runControl->postMessage(message, StdOutFormat);
@@ -625,10 +626,12 @@ static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl,
[barrier, runControl, debugInfo, handler](qint64 pid) {
handleIosToolStartedOnSimulator(barrier, runControl, debugInfo, handler, pid);
});
- QObject::connect(runControl, &RunControl::canceled, handler, [handler] {
- if (handler->isRunning())
- handler->stop();
- });
+ if (setupCanceler) {
+ QObject::connect(runControl, &RunControl::canceled, handler, [handler] {
+ if (handler->isRunning())
+ handler->stop();
+ });
+ }
const CommandLine command = runControl->commandLine();
QStringList args = ProcessArgs::splitArgs(command.arguments(), OsTypeMac);
@@ -651,8 +654,10 @@ static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl,
const auto onIosToolDone = [runControl](DoneWith result) {
if (result == DoneWith::Success)
runControl->postMessage(Tr::tr("Run ended."), NormalMessageFormat);
- else
+ else if (result == DoneWith::Error)
runControl->postMessage(Tr::tr("Run ended with error."), ErrorMessageFormat);
+ else
+ runControl->postMessage(Tr::tr("Run canceled."), ErrorMessageFormat);
};
return {
@@ -664,10 +669,13 @@ static Group iosToolKicker(const StoredBarrier &barrier, RunControl *runControl,
static Group iosToolRecipe(RunControl *runControl, const DebugInfo &debugInfo = {},
const std::optional<ExecutableItem> &afterStartedRecipe = {})
{
- const auto kicker = [runControl, debugInfo](const StoredBarrier &barrier) {
- return iosToolKicker(barrier, runControl, debugInfo);
+ const bool setupCanceler = !afterStartedRecipe;
+ const auto kicker = [runControl, debugInfo, setupCanceler](const StoredBarrier &barrier) {
+ return iosToolKicker(barrier, runControl, debugInfo, setupCanceler);
};
- return When (kicker) >> Do {
+ const WorkflowPolicy policy = afterStartedRecipe ? WorkflowPolicy::StopOnSuccessOrError
+ : WorkflowPolicy::StopOnError;
+ return When (kicker, policy) >> Do {
afterStartedRecipe ? *afterStartedRecipe : Sync([runControl] { runControl->reportStarted(); })
};
}
diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp
index bcdccf4e684..57eb62b9a38 100644
--- a/src/plugins/ios/iostoolhandler.cpp
+++ b/src/plugins/ios/iostoolhandler.cpp
@@ -967,6 +967,14 @@ bool IosToolHandler::isRunning() const
return d->isRunning();
}
+IosToolRunner::~IosToolRunner()
+{
+ if (m_iosToolHandler && m_iosToolHandler->isRunning()) {
+ QObject::disconnect(m_iosToolHandler.get(), &IosToolHandler::finished, nullptr, nullptr);
+ m_iosToolHandler->stop();
+ }
+}
+
void IosToolRunner::setStartHandler(const StartHandler &startHandler)
{
m_startHandler = startHandler;
diff --git a/src/plugins/ios/iostoolhandler.h b/src/plugins/ios/iostoolhandler.h
index e3587e1313c..d7a3e21d89d 100644
--- a/src/plugins/ios/iostoolhandler.h
+++ b/src/plugins/ios/iostoolhandler.h
@@ -73,9 +73,11 @@ private:
// for Tasking:
-class IosToolRunner
+class IosToolRunner final
{
public:
+ ~IosToolRunner();
+
using StartHandler = std::function<void(IosToolHandler *)>;
void setStartHandler(const StartHandler &startHandler);
void setDeviceType(const Internal::IosDeviceType &type);