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
{
return DeviceProcessSignalOperation::Ptr(
new QnxDeviceProcessSignalOperation(sshParameters()));
return DeviceProcessSignalOperation::Ptr(new QnxDeviceProcessSignalOperation(sharedFromThis()));
}
// Factory

View File

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

View File

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

View File

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

View File

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

View File

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