Android: Hide process deleter a bit

This also avoid a spurious(?) code model warning about
"function 'deleter' is not needed and will not be emitted"

Change-Id: I76372866ec1a51b3adc350d83b8efcd497b02cb5
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
hjk
2018-05-08 11:54:32 +02:00
parent dd57d0b49d
commit 736f7f89d1
2 changed files with 19 additions and 18 deletions

View File

@@ -138,6 +138,17 @@ void findProcessPID(QFutureInterface<qint64> &fi, const QString &adbPath,
fi.reportResult(processPID);
}
static void deleter(QProcess *p)
{
p->terminate();
if (!p->waitForFinished(1000)) {
p->kill();
p->waitForFinished();
}
// Might get deleted from its own signal handler.
p->deleteLater();
}
AndroidRunnerWorkerBase::AndroidRunnerWorkerBase(RunControl *runControl, const AndroidRunnable &runnable)
: m_androidRunnable(runnable)
, m_adbLogcatProcess(nullptr, deleter)
@@ -327,7 +338,7 @@ void AndroidRunnerWorkerBase::asyncStart()
forceStop();
// Start the logcat process before app starts.
std::unique_ptr<QProcess, decltype(&deleter)> logcatProcess(new QProcess, deleter);
std::unique_ptr<QProcess, Deleter> logcatProcess(new QProcess, deleter);
connect(logcatProcess.get(), &QProcess::readyReadStandardOutput,
this, &AndroidRunnerWorkerBase::logcatReadStandardOutput);
connect(logcatProcess.get(), &QProcess::readyReadStandardError,
@@ -373,7 +384,7 @@ void AndroidRunnerWorkerBase::asyncStart()
runAdb({"shell", "run-as", m_androidRunnable.packageName, "killall", gdbServerExecutable});
runAdb({"shell", "run-as", m_androidRunnable.packageName, "rm", gdbServerSocket});
std::unique_ptr<QProcess, decltype(&deleter)> gdbServerProcess(new QProcess, deleter);
std::unique_ptr<QProcess, Deleter> gdbServerProcess(new QProcess, deleter);
gdbServerProcess->start(m_adb, selector() << "shell" << "run-as"
<< m_androidRunnable.packageName << "lib/" + gdbServerExecutable
<< "--multi" << "+" + gdbServerSocket);
@@ -457,7 +468,7 @@ void AndroidRunnerWorkerBase::handleJdbWaiting()
else
jdbPath.appendPath("jdb");
std::unique_ptr<QProcess, decltype(&deleter)> jdbProcess(new QProcess, deleter);
std::unique_ptr<QProcess, Deleter> jdbProcess(new QProcess, &deleter);
jdbProcess->setProcessChannelMode(QProcess::MergedChannels);
jdbProcess->start(jdbPath.toString(), QStringList() << "-connect" <<
QString("com.sun.jdi.SocketAttach:hostname=localhost,port=%1")