summaryrefslogtreecommitdiff
path: root/src/plugins/ios/iostoolhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/ios/iostoolhandler.cpp')
-rw-r--r--src/plugins/ios/iostoolhandler.cpp68
1 files changed, 33 insertions, 35 deletions
diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp
index f9318712a6..c64a273142 100644
--- a/src/plugins/ios/iostoolhandler.cpp
+++ b/src/plugins/ios/iostoolhandler.cpp
@@ -29,12 +29,15 @@
#include "iossimulator.h"
#include "simulatorcontrol.h"
-#include "debugger/debuggerconstants.h"
#include <coreplugin/icore.h>
-#include <utils/qtcassert.h>
+
+#include <debugger/debuggerconstants.h>
+
#include <utils/fileutils.h>
+#include <utils/futuresynchronizer.h>
+#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <utils/runextensions.h>
-#include <utils/synchronousprocess.h>
#include <QCoreApplication>
#include <QDir>
@@ -304,7 +307,6 @@ class IosSimulatorToolHandlerPrivate : public IosToolHandlerPrivate
{
public:
explicit IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, IosToolHandler *q);
- ~IosSimulatorToolHandlerPrivate() override;
// IosToolHandlerPrivate overrides
public:
@@ -324,9 +326,8 @@ private:
private:
qint64 m_pid = -1;
- SimulatorControl *simCtl;
LogTailFiles outputLogger;
- QList<QFuture<void>> futureList;
+ Utils::FutureSynchronizer futureSynchronizer;
};
IosToolHandlerPrivate::IosToolHandlerPrivate(const IosDeviceType &devType,
@@ -799,22 +800,14 @@ void IosDeviceToolHandlerPrivate::stop(int errorCode)
// IosSimulatorToolHandlerPrivate
IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(const IosDeviceType &devType,
- IosToolHandler *q)
- : IosToolHandlerPrivate(devType, q),
- simCtl(new SimulatorControl)
+ IosToolHandler *q)
+ : IosToolHandlerPrivate(devType, q)
{
QObject::connect(&outputLogger, &LogTailFiles::logMessage,
std::bind(&IosToolHandlerPrivate::appOutput, this, _1));
+ futureSynchronizer.setCancelOnWait(true);
}
-IosSimulatorToolHandlerPrivate::~IosSimulatorToolHandlerPrivate()
-{
- foreach (auto f, futureList) {
- if (!f.isFinished())
- f.cancel();
- }
- delete simCtl;
-}
void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundlePath,
const QString &deviceIdentifier, int timeout)
{
@@ -839,7 +832,8 @@ void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundle
if (SimulatorControl::isSimulatorRunning(m_deviceId))
installAppOnSimulator();
else
- futureList << QFuture<void>(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart));
+ futureSynchronizer.addFuture(
+ Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart));
}
void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath,
@@ -875,7 +869,8 @@ void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath,
if (SimulatorControl::isSimulatorRunning(m_deviceId))
launchAppOnSimulator(extraArgs);
else
- futureList << QFuture<void>(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart));
+ futureSynchronizer.addFuture(
+ Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart));
}
void IosSimulatorToolHandlerPrivate::requestDeviceInfo(const QString &deviceId, int timeout)
@@ -900,10 +895,8 @@ void IosSimulatorToolHandlerPrivate::stop(int errorCode)
kill(m_pid, SIGKILL);
#endif
m_pid = -1;
- foreach (auto f, futureList) {
- if (!f.isFinished())
- f.cancel();
- }
+ futureSynchronizer.cancelAllFutures();
+ futureSynchronizer.flushFinishedFutures();
toolExited(errorCode);
emit q->finished(q);
@@ -927,8 +920,9 @@ void IosSimulatorToolHandlerPrivate::installAppOnSimulator()
};
isTransferringApp(m_bundlePath, m_deviceId, 20, 100, "");
- auto installFuture = simCtl->installApp(m_deviceId, Utils::FilePath::fromString(m_bundlePath));
- futureList << QFuture<void>(Utils::onResultReady(installFuture, onResponseAppInstall));
+ auto installFuture = SimulatorControl::installApp(m_deviceId,
+ Utils::FilePath::fromString(m_bundlePath));
+ futureSynchronizer.addFuture(Utils::onResultReady(installFuture, onResponseAppInstall));
}
void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &extraArgs)
@@ -977,10 +971,10 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext
gotInferiorPid(m_bundlePath, m_deviceId, response.pID);
didStartApp(m_bundlePath, m_deviceId, Ios::IosToolHandler::Success);
// Start monitoring app's life signs.
- futureList << Utils::runAsync(monitorPid, response.pID);
+ futureSynchronizer.addFuture(Utils::runAsync(monitorPid, response.pID));
if (captureConsole)
- futureList << Utils::runAsync(&LogTailFiles::exec, &outputLogger, stdoutFile,
- stderrFile);
+ futureSynchronizer.addFuture(Utils::runAsync(&LogTailFiles::exec, &outputLogger,
+ stdoutFile, stderrFile));
} else {
m_pid = -1;
errorMsg(IosToolHandler::tr("Application launch on simulator failed. %1")
@@ -991,11 +985,16 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext
}
};
- futureList << QFuture<void>(Utils::onResultReady(
- simCtl->launchApp(m_deviceId, bundleId, debugRun, extraArgs,
- captureConsole ? stdoutFile->fileName() : QString(),
- captureConsole ? stderrFile->fileName() : QString()),
- onResponseAppLaunch));
+ futureSynchronizer.addFuture(
+ Utils::onResultReady(SimulatorControl::launchApp(m_deviceId,
+ bundleId,
+ debugRun,
+ extraArgs,
+ captureConsole ? stdoutFile->fileName()
+ : QString(),
+ captureConsole ? stderrFile->fileName()
+ : QString()),
+ onResponseAppLaunch));
}
bool IosSimulatorToolHandlerPrivate::isResponseValid(const SimulatorControl::ResponseData &responseData)
@@ -1015,8 +1014,7 @@ bool IosSimulatorToolHandlerPrivate::isResponseValid(const SimulatorControl::Res
QString IosToolHandler::iosDeviceToolPath()
{
- QString res = Core::ICore::libexecPath() + QLatin1String("/ios/iostool");
- return res;
+ return Core::ICore::libexecPath("ios/iostool").toString();
}
IosToolHandler::IosToolHandler(const Internal::IosDeviceType &devType, QObject *parent) :