DeviceUsedPortsGatherer: Connect to QtcProcess::done() signal

Instead of connecting to errorOccurred() and finished() signals.

Change-Id: I0bd13b366abe62749e16173db2c462e7d4c6ea27
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-04-14 11:41:22 +02:00
parent e398092251
commit fb12dd5a55
2 changed files with 20 additions and 42 deletions

View File

@@ -34,8 +34,6 @@
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <utils/url.h> #include <utils/url.h>
#include <QPointer>
using namespace QSsh; using namespace QSsh;
using namespace Utils; using namespace Utils;
@@ -45,7 +43,7 @@ namespace Internal {
class DeviceUsedPortsGathererPrivate class DeviceUsedPortsGathererPrivate
{ {
public: public:
QPointer<QtcProcess> process; std::unique_ptr<QtcProcess> process;
QList<Port> usedPorts; QList<Port> usedPorts;
QByteArray remoteStdout; QByteArray remoteStdout;
QByteArray remoteStderr; QByteArray remoteStderr;
@@ -76,16 +74,14 @@ void DeviceUsedPortsGatherer::start(const IDevice::ConstPtr &device)
QTC_ASSERT(d->portsGatheringMethod, emit error("Not implemented"); return); QTC_ASSERT(d->portsGatheringMethod, emit error("Not implemented"); return);
const QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol; const QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol;
d->process = d->device->createProcess(this); d->process.reset(d->device->createProcess(this));
connect(d->process.data(), &QtcProcess::finished, connect(d->process.get(), &QtcProcess::done,
this, &DeviceUsedPortsGatherer::handleProcessFinished); this, &DeviceUsedPortsGatherer::handleProcessDone);
connect(d->process.data(), &QtcProcess::errorOccurred, connect(d->process.get(), &QtcProcess::readyReadStandardOutput,
this, &DeviceUsedPortsGatherer::handleProcessError); this, [this] { d->remoteStdout += d->process->readAllStandardOutput(); });
connect(d->process.data(), &QtcProcess::readyReadStandardOutput, connect(d->process.get(), &QtcProcess::readyReadStandardError,
this, &DeviceUsedPortsGatherer::handleRemoteStdOut); this, [this] { d->remoteStderr += d->process->readAllStandardError(); });
connect(d->process.data(), &QtcProcess::readyReadStandardError,
this, &DeviceUsedPortsGatherer::handleRemoteStdErr);
d->process->setCommand(d->portsGatheringMethod->commandLine(protocol)); d->process->setCommand(d->portsGatheringMethod->commandLine(protocol));
d->process->start(); d->process->start();
@@ -95,9 +91,10 @@ void DeviceUsedPortsGatherer::stop()
{ {
d->remoteStdout.clear(); d->remoteStdout.clear();
d->remoteStderr.clear(); d->remoteStderr.clear();
if (d->process) if (d->process) {
disconnect(d->process.data(), nullptr, this, nullptr); d->process->disconnect();
d->process.clear(); d->process.release()->deleteLater();
}
} }
Port DeviceUsedPortsGatherer::getNextFreePort(PortList *freePorts) const Port DeviceUsedPortsGatherer::getNextFreePort(PortList *freePorts) const
@@ -126,19 +123,16 @@ void DeviceUsedPortsGatherer::setupUsedPorts()
emit portListReady(); emit portListReady();
} }
void DeviceUsedPortsGatherer::handleProcessError() void DeviceUsedPortsGatherer::handleProcessDone()
{ {
emit error(tr("Connection error: %1").arg(d->process->errorString())); if (d->process->error() != QProcess::UnknownError) {
stop(); emit error(tr("Connection error: %1").arg(d->process->errorString()));
} stop();
void DeviceUsedPortsGatherer::handleProcessFinished()
{
if (!d->process)
return; return;
}
QString errMsg; QString errMsg;
QProcess::ExitStatus exitStatus = d->process->exitStatus(); switch (d->process->exitStatus()) {
switch (exitStatus) {
case QProcess::CrashExit: case QProcess::CrashExit:
errMsg = tr("Remote process crashed: %1").arg(d->process->errorString()); errMsg = tr("Remote process crashed: %1").arg(d->process->errorString());
break; break;
@@ -163,18 +157,6 @@ void DeviceUsedPortsGatherer::handleProcessFinished()
stop(); stop();
} }
void DeviceUsedPortsGatherer::handleRemoteStdOut()
{
if (d->process)
d->remoteStdout += d->process->readAllStandardOutput();
}
void DeviceUsedPortsGatherer::handleRemoteStdErr()
{
if (d->process)
d->remoteStderr += d->process->readAllStandardError();
}
// PortGatherer // PortGatherer
PortsGatherer::PortsGatherer(RunControl *runControl) PortsGatherer::PortsGatherer(RunControl *runControl)

View File

@@ -56,11 +56,7 @@ signals:
void portListReady(); void portListReady();
private: private:
void handleRemoteStdOut(); void handleProcessDone();
void handleRemoteStdErr();
void handleProcessError();
void handleProcessFinished();
void setupUsedPorts(); void setupUsedPorts();
Internal::DeviceUsedPortsGathererPrivate * const d; Internal::DeviceUsedPortsGathererPrivate * const d;