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);
|
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)
|
AndroidRunnerWorkerBase::AndroidRunnerWorkerBase(RunControl *runControl, const AndroidRunnable &runnable)
|
||||||
: m_androidRunnable(runnable)
|
: m_androidRunnable(runnable)
|
||||||
, m_adbLogcatProcess(nullptr, deleter)
|
, m_adbLogcatProcess(nullptr, deleter)
|
||||||
@@ -327,7 +338,7 @@ void AndroidRunnerWorkerBase::asyncStart()
|
|||||||
forceStop();
|
forceStop();
|
||||||
|
|
||||||
// Start the logcat process before app starts.
|
// 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,
|
connect(logcatProcess.get(), &QProcess::readyReadStandardOutput,
|
||||||
this, &AndroidRunnerWorkerBase::logcatReadStandardOutput);
|
this, &AndroidRunnerWorkerBase::logcatReadStandardOutput);
|
||||||
connect(logcatProcess.get(), &QProcess::readyReadStandardError,
|
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, "killall", gdbServerExecutable});
|
||||||
runAdb({"shell", "run-as", m_androidRunnable.packageName, "rm", gdbServerSocket});
|
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"
|
gdbServerProcess->start(m_adb, selector() << "shell" << "run-as"
|
||||||
<< m_androidRunnable.packageName << "lib/" + gdbServerExecutable
|
<< m_androidRunnable.packageName << "lib/" + gdbServerExecutable
|
||||||
<< "--multi" << "+" + gdbServerSocket);
|
<< "--multi" << "+" + gdbServerSocket);
|
||||||
@@ -457,7 +468,7 @@ void AndroidRunnerWorkerBase::handleJdbWaiting()
|
|||||||
else
|
else
|
||||||
jdbPath.appendPath("jdb");
|
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->setProcessChannelMode(QProcess::MergedChannels);
|
||||||
jdbProcess->start(jdbPath.toString(), QStringList() << "-connect" <<
|
jdbProcess->start(jdbPath.toString(), QStringList() << "-connect" <<
|
||||||
QString("com.sun.jdi.SocketAttach:hostname=localhost,port=%1")
|
QString("com.sun.jdi.SocketAttach:hostname=localhost,port=%1")
|
||||||
|
|||||||
@@ -42,17 +42,6 @@ namespace Internal {
|
|||||||
|
|
||||||
const int MIN_SOCKET_HANDSHAKE_PORT = 20001;
|
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
|
class AndroidRunnerWorkerBase : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -88,13 +77,14 @@ protected:
|
|||||||
Settled
|
Settled
|
||||||
};
|
};
|
||||||
virtual void onProcessIdChanged(qint64 pid);
|
virtual void onProcessIdChanged(qint64 pid);
|
||||||
|
using Deleter = void (*)(QProcess *);
|
||||||
|
|
||||||
// Create the processes and timer in the worker thread, for correct thread affinity
|
// Create the processes and timer in the worker thread, for correct thread affinity
|
||||||
AndroidRunnable m_androidRunnable;
|
AndroidRunnable m_androidRunnable;
|
||||||
QString m_adb;
|
QString m_adb;
|
||||||
qint64 m_processPID = -1;
|
qint64 m_processPID = -1;
|
||||||
std::unique_ptr<QProcess, decltype(&deleter)> m_adbLogcatProcess;
|
std::unique_ptr<QProcess, Deleter> m_adbLogcatProcess;
|
||||||
std::unique_ptr<QProcess, decltype(&deleter)> m_psIsAlive;
|
std::unique_ptr<QProcess, Deleter> m_psIsAlive;
|
||||||
QByteArray m_stdoutBuffer;
|
QByteArray m_stdoutBuffer;
|
||||||
QByteArray m_stderrBuffer;
|
QByteArray m_stderrBuffer;
|
||||||
QRegExp m_logCatRegExp;
|
QRegExp m_logCatRegExp;
|
||||||
@@ -107,8 +97,8 @@ protected:
|
|||||||
QString m_lastRunAdbError;
|
QString m_lastRunAdbError;
|
||||||
JDBState m_jdbState = JDBState::Idle;
|
JDBState m_jdbState = JDBState::Idle;
|
||||||
Utils::Port m_localJdbServerPort;
|
Utils::Port m_localJdbServerPort;
|
||||||
std::unique_ptr<QProcess, decltype(&deleter)> m_gdbServerProcess;
|
std::unique_ptr<QProcess, Deleter> m_gdbServerProcess;
|
||||||
std::unique_ptr<QProcess, decltype(&deleter)> m_jdbProcess;
|
std::unique_ptr<QProcess, Deleter> m_jdbProcess;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user