forked from qt-creator/qt-creator
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:
@@ -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")
|
||||
|
||||
@@ -42,17 +42,6 @@ namespace Internal {
|
||||
|
||||
const int MIN_SOCKET_HANDSHAKE_PORT = 20001;
|
||||
|
||||
static inline void deleter(QProcess *p)
|
||||
{
|
||||
p->terminate();
|
||||
if (!p->waitForFinished(1000)) {
|
||||
p->kill();
|
||||
p->waitForFinished();
|
||||
}
|
||||
// Might get deleted from its own signal handler.
|
||||
p->deleteLater();
|
||||
}
|
||||
|
||||
class AndroidRunnerWorkerBase : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -88,13 +77,14 @@ protected:
|
||||
Settled
|
||||
};
|
||||
virtual void onProcessIdChanged(qint64 pid);
|
||||
using Deleter = void (*)(QProcess *);
|
||||
|
||||
// Create the processes and timer in the worker thread, for correct thread affinity
|
||||
AndroidRunnable m_androidRunnable;
|
||||
QString m_adb;
|
||||
qint64 m_processPID = -1;
|
||||
std::unique_ptr<QProcess, decltype(&deleter)> m_adbLogcatProcess;
|
||||
std::unique_ptr<QProcess, decltype(&deleter)> m_psIsAlive;
|
||||
std::unique_ptr<QProcess, Deleter> m_adbLogcatProcess;
|
||||
std::unique_ptr<QProcess, Deleter> m_psIsAlive;
|
||||
QByteArray m_stdoutBuffer;
|
||||
QByteArray m_stderrBuffer;
|
||||
QRegExp m_logCatRegExp;
|
||||
@@ -107,8 +97,8 @@ protected:
|
||||
QString m_lastRunAdbError;
|
||||
JDBState m_jdbState = JDBState::Idle;
|
||||
Utils::Port m_localJdbServerPort;
|
||||
std::unique_ptr<QProcess, decltype(&deleter)> m_gdbServerProcess;
|
||||
std::unique_ptr<QProcess, decltype(&deleter)> m_jdbProcess;
|
||||
std::unique_ptr<QProcess, Deleter> m_gdbServerProcess;
|
||||
std::unique_ptr<QProcess, Deleter> m_jdbProcess;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user