RemoteLinuxSignalOperation: Don't use SshRemoteProcessRunner

Use QtcProcess with a path on device instead.

Change-Id: I14a557f61414a12dabc19e3b2f8c9c277ecfb52d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-05-03 16:30:25 +02:00
parent 5f9cbe7fe8
commit da0f950821
6 changed files with 29 additions and 56 deletions

View File

@@ -203,8 +203,7 @@ Utils::ProcessInterface *QnxDevice::createProcessInterface() const
DeviceProcessSignalOperation::Ptr QnxDevice::signalOperation() const DeviceProcessSignalOperation::Ptr QnxDevice::signalOperation() const
{ {
return DeviceProcessSignalOperation::Ptr( return DeviceProcessSignalOperation::Ptr(new QnxDeviceProcessSignalOperation(sharedFromThis()));
new QnxDeviceProcessSignalOperation(sshParameters()));
} }
// Factory // Factory

View File

@@ -25,14 +25,11 @@
#include "qnxdeviceprocesssignaloperation.h" #include "qnxdeviceprocesssignaloperation.h"
#include <utils/fileutils.h>
using namespace Qnx;
using namespace Qnx::Internal; using namespace Qnx::Internal;
QnxDeviceProcessSignalOperation::QnxDeviceProcessSignalOperation( QnxDeviceProcessSignalOperation::QnxDeviceProcessSignalOperation(
const QSsh::SshConnectionParameters &sshParameters) const ProjectExplorer::IDeviceConstPtr &device)
: RemoteLinux::RemoteLinuxSignalOperation(sshParameters) : RemoteLinux::RemoteLinuxSignalOperation(device)
{ {
} }

View File

@@ -34,7 +34,7 @@ class QnxDeviceProcessSignalOperation : public RemoteLinux::RemoteLinuxSignalOpe
{ {
Q_OBJECT Q_OBJECT
protected: protected:
explicit QnxDeviceProcessSignalOperation(const QSsh::SshConnectionParameters &sshParameters); explicit QnxDeviceProcessSignalOperation(const ProjectExplorer::IDeviceConstPtr &device);
private: private:
QString killProcessByNameCommandLine(const QString &filePath) const override; QString killProcessByNameCommandLine(const QString &filePath) const override;

View File

@@ -1055,7 +1055,7 @@ DeviceTester *LinuxDevice::createDeviceTester() const
DeviceProcessSignalOperation::Ptr LinuxDevice::signalOperation() const DeviceProcessSignalOperation::Ptr LinuxDevice::signalOperation() const
{ {
return DeviceProcessSignalOperation::Ptr(new RemoteLinuxSignalOperation(sshParameters())); return DeviceProcessSignalOperation::Ptr(new RemoteLinuxSignalOperation(sharedFromThis()));
} }
class LinuxDeviceEnvironmentFetcher : public DeviceEnvironmentFetcher class LinuxDeviceEnvironmentFetcher : public DeviceEnvironmentFetcher

View File

@@ -25,24 +25,21 @@
#include "remotelinuxsignaloperation.h" #include "remotelinuxsignaloperation.h"
#include <ssh/sshremoteprocessrunner.h> #include <utils/commandline.h>
#include <ssh/sshconnection.h>
#include <utils/qtcassert.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
using namespace RemoteLinux; using namespace RemoteLinux;
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Utils;
RemoteLinuxSignalOperation::RemoteLinuxSignalOperation( RemoteLinuxSignalOperation::RemoteLinuxSignalOperation(
const QSsh::SshConnectionParameters &sshParameters) const IDeviceConstPtr &device)
: m_sshParameters(sshParameters) : m_device(device)
{} {}
RemoteLinuxSignalOperation::~RemoteLinuxSignalOperation() RemoteLinuxSignalOperation::~RemoteLinuxSignalOperation() = default;
{
if (m_runner)
m_runner->deleteLater();
}
static QString signalProcessGroupByPidCommandLine(qint64 pid, int signal) static QString signalProcessGroupByPidCommandLine(qint64 pid, int signal)
{ {
@@ -51,20 +48,12 @@ static QString signalProcessGroupByPidCommandLine(qint64 pid, int signal)
void RemoteLinuxSignalOperation::run(const QString &command) void RemoteLinuxSignalOperation::run(const QString &command)
{ {
QTC_ASSERT(!m_runner, return); QTC_ASSERT(!m_process, return);
m_runner = new QSsh::SshRemoteProcessRunner(); m_process.reset(new QtcProcess);
connect(m_runner, &QSsh::SshRemoteProcessRunner::finished, connect(m_process.get(), &QtcProcess::done, this, &RemoteLinuxSignalOperation::runnerDone);
this, &RemoteLinuxSignalOperation::runnerProcessFinished);
connect(m_runner, &QSsh::SshRemoteProcessRunner::connectionError,
this, &RemoteLinuxSignalOperation::runnerConnectionError);
m_runner->run(command, m_sshParameters);
}
void RemoteLinuxSignalOperation::finish() m_process->setCommand({m_device->mapToGlobalPath("/bin/sh"), {"-c", command}});
{ m_process->start();
delete m_runner;
m_runner = nullptr;
emit finished(m_errorMessage);
} }
static QString signalProcessGroupByNameCommandLine(const QString &filePath, int signal) static QString signalProcessGroupByNameCommandLine(const QString &filePath, int signal)
@@ -112,21 +101,16 @@ void RemoteLinuxSignalOperation::interruptProcess(const QString &filePath)
run(interruptProcessByNameCommandLine(filePath)); run(interruptProcessByNameCommandLine(filePath));
} }
void RemoteLinuxSignalOperation::runnerProcessFinished() void RemoteLinuxSignalOperation::runnerDone()
{ {
m_errorMessage.clear(); m_errorMessage.clear();
if (m_runner->exitStatus() != QProcess::NormalExit) { if (m_process->exitStatus() != QProcess::NormalExit) {
m_errorMessage = m_runner->errorString(); m_errorMessage = m_process->errorString();
} else if (m_runner->exitCode() != 0) { } else if (m_process->exitCode() != 0) {
m_errorMessage = tr("Exit code is %1. stderr:").arg(m_runner->exitCode()) m_errorMessage = tr("Exit code is %1. stderr:").arg(m_process->exitCode())
+ QLatin1Char(' ') + QLatin1Char(' ')
+ QString::fromLatin1(m_runner->readAllStandardError()); + QString::fromLatin1(m_process->readAllStandardError());
} }
finish(); m_process.release()->deleteLater();
} emit finished(m_errorMessage);
void RemoteLinuxSignalOperation::runnerConnectionError()
{
m_errorMessage = m_runner->lastConnectionErrorString();
finish();
} }

View File

@@ -28,11 +28,6 @@
#include "remotelinux_export.h" #include "remotelinux_export.h"
#include <projectexplorer/devicesupport/idevice.h> #include <projectexplorer/devicesupport/idevice.h>
#include <ssh/sshconnection.h>
namespace QSsh {
class SshRemoteProcessRunner;
}
namespace RemoteLinux { namespace RemoteLinux {
@@ -49,19 +44,17 @@ public:
void interruptProcess(const QString &filePath) override; void interruptProcess(const QString &filePath) override;
protected: protected:
RemoteLinuxSignalOperation(const QSsh::SshConnectionParameters &sshParameters); RemoteLinuxSignalOperation(const ProjectExplorer::IDeviceConstPtr &device);
private: private:
virtual QString killProcessByNameCommandLine(const QString &filePath) const; virtual QString killProcessByNameCommandLine(const QString &filePath) const;
virtual QString interruptProcessByNameCommandLine(const QString &filePath) const; virtual QString interruptProcessByNameCommandLine(const QString &filePath) const;
void runnerProcessFinished(); void runnerDone();
void runnerConnectionError();
void run(const QString &command); void run(const QString &command);
void finish();
const QSsh::SshConnectionParameters m_sshParameters; const ProjectExplorer::IDeviceConstPtr m_device;
QSsh::SshRemoteProcessRunner *m_runner = nullptr; std::unique_ptr<Utils::QtcProcess> m_process;
friend class LinuxDevice; friend class LinuxDevice;
}; };