forked from qt-creator/qt-creator
LinuxDevice: Run test echo command after successful start
After we have started the shell it can happen that it will finish silently soon due to e.g. ssh server not running. Before we try to execute any command in the shell we schedule a test echo command just after successful start in order to confirm that the shell is running fine. If waiting for ready read returned false (i.e. the shell process finished) or if we don't receive the expected newline character we report a start failure. Fixes: QTCREATORBUG-26861 Change-Id: I7387b3a366f8e6f4a58745582bb803f5060cfc36 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -197,19 +197,34 @@ public:
|
||||
delete m_shell;
|
||||
}
|
||||
|
||||
bool startFailed(const SshConnectionParameters ¶meters)
|
||||
{
|
||||
delete m_shell;
|
||||
m_shell = nullptr;
|
||||
DEBUG("Failed to connect to " << parameters.host());
|
||||
return false;
|
||||
}
|
||||
|
||||
bool start(const SshConnectionParameters ¶meters)
|
||||
{
|
||||
m_shell = new SshRemoteProcess("/bin/sh",
|
||||
parameters.connectionOptions(SshSettings::sshFilePath()) << parameters.host(),
|
||||
ProcessMode::Writer);
|
||||
m_shell->start();
|
||||
const bool ret = m_shell->waitForStarted();
|
||||
if (!ret) {
|
||||
delete m_shell;
|
||||
m_shell = nullptr;
|
||||
DEBUG("Failed to connect to " << parameters.host());
|
||||
}
|
||||
return ret;
|
||||
const bool startOK = m_shell->waitForStarted();
|
||||
if (!startOK)
|
||||
return startFailed(parameters);
|
||||
|
||||
m_shell->write("echo\n");
|
||||
const bool readOK = m_shell->waitForReadyRead();
|
||||
if (!readOK)
|
||||
return startFailed(parameters);
|
||||
|
||||
const QByteArray output = m_shell->readAllStandardOutput();
|
||||
if (output != "\n")
|
||||
return startFailed(parameters);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool runInShell(const CommandLine &cmd, const QByteArray &data = {})
|
||||
|
Reference in New Issue
Block a user