diff options
author | Jarek Kobus <[email protected]> | 2025-09-15 15:50:56 +0200 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2025-09-17 11:33:52 +0000 |
commit | 6550577169725398b33c33fbb0f651a2ed127cd6 (patch) | |
tree | 072fdb341fff36a6b7f939e6533e9ec794adac52 | |
parent | 303c1934241b33bcd81dac8ba3c26b1777dd6f6f (diff) |
Ios: Fix stopping profiler
Change-Id: I9d7ddb6ab123cbd48cc6638b8a3f76985a988d0f
Reviewed-by: Eike Ziller <[email protected]>
-rw-r--r-- | src/plugins/ios/iosrunner.cpp | 30 | ||||
-rw-r--r-- | src/plugins/ios/iostoolhandler.cpp | 8 | ||||
-rw-r--r-- | src/plugins/ios/iostoolhandler.h | 4 |
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); |