diff --git a/src/plugins/remotelinux/remotelinuxenvironmentreader.cpp b/src/plugins/remotelinux/remotelinuxenvironmentreader.cpp index 3f3dcdaecfd..a5d386cc2f9 100644 --- a/src/plugins/remotelinux/remotelinuxenvironmentreader.cpp +++ b/src/plugins/remotelinux/remotelinuxenvironmentreader.cpp @@ -52,29 +52,20 @@ void RemoteLinuxEnvironmentReader::start() setFinished(); return; } - m_stop = false; m_deviceProcess = m_device->createProcess(this); - connect(m_deviceProcess, &QtcProcess::errorOccurred, - this, &RemoteLinuxEnvironmentReader::handleError); - connect(m_deviceProcess, &QtcProcess::finished, - this, &RemoteLinuxEnvironmentReader::remoteProcessFinished); + connect(m_deviceProcess, &QtcProcess::done, + this, &RemoteLinuxEnvironmentReader::handleDone); m_deviceProcess->setCommand({"env", {}}); m_deviceProcess->start(); } void RemoteLinuxEnvironmentReader::stop() { - m_stop = true; - destroyProcess(); -} - -void RemoteLinuxEnvironmentReader::handleError() -{ - if (m_stop) + if (!m_deviceProcess) return; - - emit error(tr("Error: %1").arg(m_deviceProcess->errorString())); - setFinished(); + m_deviceProcess->disconnect(this); + m_deviceProcess->deleteLater(); + m_deviceProcess = nullptr; } void RemoteLinuxEnvironmentReader::handleCurrentDeviceConfigChanged() @@ -83,10 +74,13 @@ void RemoteLinuxEnvironmentReader::handleCurrentDeviceConfigChanged() setFinished(); } -void RemoteLinuxEnvironmentReader::remoteProcessFinished() +void RemoteLinuxEnvironmentReader::handleDone() { - if (m_stop) + if (m_deviceProcess->result() != ProcessResult::FinishedWithSuccess) { + emit error(tr("Error: %1").arg(m_deviceProcess->errorString())); + setFinished(); return; + } m_env.clear(); QString errorMessage; @@ -96,6 +90,7 @@ void RemoteLinuxEnvironmentReader::remoteProcessFinished() errorMessage = tr("Process exited with code %1.") .arg(m_deviceProcess->exitCode()); } + if (!errorMessage.isEmpty()) { errorMessage = tr("Error running 'env': %1").arg(errorMessage); const QString remoteStderr @@ -104,7 +99,7 @@ void RemoteLinuxEnvironmentReader::remoteProcessFinished() errorMessage += QLatin1Char('\n') + tr("Remote stderr was: \"%1\"").arg(remoteStderr); emit error(errorMessage); } else { - QString remoteOutput = QString::fromUtf8(m_deviceProcess->readAllStandardOutput()); + const QString remoteOutput = QString::fromUtf8(m_deviceProcess->readAllStandardOutput()); if (!remoteOutput.isEmpty()) { m_env = Utils::Environment(remoteOutput.split(QLatin1Char('\n'), Qt::SkipEmptyParts), Utils::OsTypeLinux); @@ -119,14 +114,5 @@ void RemoteLinuxEnvironmentReader::setFinished() emit finished(); } -void RemoteLinuxEnvironmentReader::destroyProcess() -{ - if (!m_deviceProcess) - return; - m_deviceProcess->disconnect(this); - m_deviceProcess->deleteLater(); - m_deviceProcess = nullptr; -} - } // namespace Internal } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxenvironmentreader.h b/src/plugins/remotelinux/remotelinuxenvironmentreader.h index 10d4b569459..da6b858e291 100644 --- a/src/plugins/remotelinux/remotelinuxenvironmentreader.h +++ b/src/plugins/remotelinux/remotelinuxenvironmentreader.h @@ -53,12 +53,9 @@ signals: void error(const QString &error); private: - void handleError(); - void remoteProcessFinished(); + void handleDone(); void setFinished(); - void destroyProcess(); - bool m_stop = false; Utils::Environment m_env; ProjectExplorer::IDeviceConstPtr m_device; Utils::QtcProcess *m_deviceProcess = nullptr;