forked from qt-creator/qt-creator
SSH: Fix exit status/exit code interpretation
A "regular" exit of the ssh binary with exit code 255 means that the remote process has crashed. Change-Id: I82e6e44079041459e78e4f8f7e7b6e5cbcaa6c44 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -68,7 +68,12 @@ SshRemoteProcess::SshRemoteProcess(const QByteArray &command, const QStringList
|
|||||||
connect(this,
|
connect(this,
|
||||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
|
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
|
||||||
[this] {
|
[this] {
|
||||||
emit done(exitStatus() == QProcess::NormalExit ? QString() : errorString());
|
QString error;
|
||||||
|
if (exitStatus() == QProcess::CrashExit)
|
||||||
|
error = tr("The ssh binary crashed: %1").arg(errorString());
|
||||||
|
else if (exitCode() == 255)
|
||||||
|
error = tr("Remote process crashed.");
|
||||||
|
emit done(error);
|
||||||
});
|
});
|
||||||
connect(this, &QProcess::errorOccurred, [this](QProcess::ProcessError error) {
|
connect(this, &QProcess::errorOccurred, [this](QProcess::ProcessError error) {
|
||||||
if (error == QProcess::FailedToStart)
|
if (error == QProcess::FailedToStart)
|
||||||
|
@@ -139,7 +139,7 @@ QProcess::ProcessState SshDeviceProcess::state() const
|
|||||||
|
|
||||||
QProcess::ExitStatus SshDeviceProcess::exitStatus() const
|
QProcess::ExitStatus SshDeviceProcess::exitStatus() const
|
||||||
{
|
{
|
||||||
return d->exitStatus == QSsh::SshRemoteProcess::NormalExit
|
return d->exitStatus == QSsh::SshRemoteProcess::NormalExit && d->exitCode != 255
|
||||||
? QProcess::NormalExit : QProcess::CrashExit;
|
? QProcess::NormalExit : QProcess::CrashExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,9 +223,9 @@ void SshDeviceProcess::handleProcessStarted()
|
|||||||
emit started();
|
emit started();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SshDeviceProcess::handleProcessFinished()
|
void SshDeviceProcess::handleProcessFinished(const QString &error)
|
||||||
{
|
{
|
||||||
d->errorMessage = d->process->errorString();
|
d->errorMessage = error;
|
||||||
d->exitCode = d->process->exitCode();
|
d->exitCode = d->process->exitCode();
|
||||||
d->setState(SshDeviceProcessPrivate::Inactive);
|
d->setState(SshDeviceProcessPrivate::Inactive);
|
||||||
emit finished();
|
emit finished();
|
||||||
|
@@ -60,7 +60,7 @@ private:
|
|||||||
void handleConnectionError();
|
void handleConnectionError();
|
||||||
void handleDisconnected();
|
void handleDisconnected();
|
||||||
void handleProcessStarted();
|
void handleProcessStarted();
|
||||||
void handleProcessFinished();
|
void handleProcessFinished(const QString &error);
|
||||||
void handleStdout();
|
void handleStdout();
|
||||||
void handleStderr();
|
void handleStderr();
|
||||||
void handleKillOperationFinished(const QString &errorMessage);
|
void handleKillOperationFinished(const QString &errorMessage);
|
||||||
|
Reference in New Issue
Block a user