diff --git a/src/libs/ssh/sftpsession.cpp b/src/libs/ssh/sftpsession.cpp index 2b5535e1296..2112475eb4f 100644 --- a/src/libs/ssh/sftpsession.cpp +++ b/src/libs/ssh/sftpsession.cpp @@ -118,25 +118,20 @@ SftpSession::SftpSession(const QStringList &connectionArgs) : d(new SftpSessionP qCDebug(sshLog) << "sftp process started"; d->sftpProc.write("\n"); // Force initial prompt. }); - connect(&d->sftpProc, &QtcProcess::errorOccurred, [this](QProcess::ProcessError error) { - if (error == QProcess::FailedToStart) { - d->state = State::Inactive; - emit done(tr("sftp failed to start: %1").arg(d->sftpProc.errorString())); - } - }); - connect(&d->sftpProc, &QtcProcess::finished, [this] { + connect(&d->sftpProc, &QtcProcess::done, [this] { qCDebug(sshLog) << "sftp process finished"; d->state = State::Inactive; - if (d->sftpProc.exitStatus() != QProcess::NormalExit) { - emit done(tr("sftp crashed.")); - return; - } - if (d->sftpProc.exitCode() != 0) { - emit done(QString::fromLocal8Bit(d->sftpProc.readAllStandardError())); - return; - } - emit done(QString()); + const QString processMessage = [this] { + if (d->sftpProc.error() == QProcess::FailedToStart) + return tr("sftp failed to start: %1").arg(d->sftpProc.errorString()); + if (d->sftpProc.exitStatus() != QProcess::NormalExit) + return tr("sftp crashed."); + if (d->sftpProc.exitCode() != 0) + return QString::fromLocal8Bit(d->sftpProc.readAllStandardError()); + return QString(); + }(); + emit done(processMessage); }); connect(&d->sftpProc, &QtcProcess::readyReadStandardOutput, this, &SftpSession::handleStdout); } diff --git a/src/libs/ssh/sftptransfer.cpp b/src/libs/ssh/sftptransfer.cpp index 3b2acf784c9..55b7489d4b7 100644 --- a/src/libs/ssh/sftptransfer.cpp +++ b/src/libs/ssh/sftptransfer.cpp @@ -114,11 +114,11 @@ SftpTransfer::SftpTransfer(const FilesToTransfer &files, Internal::FileTransferT d->transferType = type; d->errorHandlingMode = errorHandlingMode; d->connectionArgs = connectionArgs; - connect(&d->sftpProc, &QtcProcess::errorOccurred, [this](QProcess::ProcessError error) { - if (error == QProcess::FailedToStart) + connect(&d->sftpProc, &QtcProcess::done, [this] { + if (d->sftpProc.error() == QProcess::FailedToStart) { emitError(tr("sftp failed to start: %1").arg(d->sftpProc.errorString())); - }); - connect(&d->sftpProc, &QtcProcess::finished, [this] { + return; + } if (d->sftpProc.exitStatus() != QProcess::NormalExit) { emitError(tr("sftp crashed.")); return; diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp index b1f03d58a0d..60cde1181eb 100644 --- a/src/libs/ssh/sshconnection.cpp +++ b/src/libs/ssh/sshconnection.cpp @@ -186,21 +186,12 @@ SshConnection::SshConnection(const SshConnectionParameters &serverInfo, QObject if (reply == "\n") emitConnected(); }); - connect(&d->masterProcess, &QtcProcess::errorOccurred, [this] (QProcess::ProcessError error) { - switch (error) { - case QProcess::FailedToStart: + connect(&d->masterProcess, &QtcProcess::done, this, [this] { + if (d->masterProcess.error() == QProcess::FailedToStart) { emitError(tr("Cannot establish SSH connection: Control process failed to start: %1") .arg(d->fullProcessError())); - break; - case QProcess::Crashed: // Handled by finished() handler. - case QProcess::Timedout: - case QProcess::ReadError: - case QProcess::WriteError: - case QProcess::UnknownError: - break; // Cannot happen. + return; } - }); - connect(&d->masterProcess, &QtcProcess::finished, [this] { if (d->state == Disconnecting) { emitDisconnected(); return;