From 31ed02486f207832b80b63800b6d68ad207cca2c Mon Sep 17 00:00:00 2001 From: kh1 <qt-info@nokia.com> Date: Wed, 7 Apr 2010 15:45:36 +0200 Subject: [PATCH] Revert 1eafca20114eeb92241d3a08b1eb88902292ede1. Fixes a crash introduced with the mentioned revision, since one can only have a single instance of the ne7ssh object. Poroper fix follows next. Reviewed-by: ck --- .../qt-maemo/maemosshconnection.cpp | 36 ++++++++++--------- .../qt-maemo/maemosshconnection.h | 3 -- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp index 18da1518c1a..813f09333f3 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp @@ -55,6 +55,8 @@ namespace Qt4ProjectManager { namespace Internal { namespace { + ne7ssh ssh; + char *alloc(size_t n) { return new char[n]; @@ -65,7 +67,7 @@ namespace { MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf, bool shell) - : ssh(new ne7ssh), m_channel(-1), m_stopRequested(false) + : m_channel(-1), m_stopRequested(false) { const QString *authString; int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int); @@ -76,8 +78,7 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf, authString = &devConf.keyFile; connFunc = &ne7ssh::connectWithKey; } - - m_channel = (ssh.data()->*connFunc)(devConf.host.toLatin1(), devConf.sshPort, + m_channel = (ssh.*connFunc)(devConf.host.toLatin1(), devConf.sshPort, devConf.uname.toAscii(), authString->toLatin1(), shell, devConf.timeout); if (m_channel == -1) throw MaemoSshException(tr("Could not connect to host")); @@ -86,12 +87,12 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf, MaemoSshConnection::~MaemoSshConnection() { qDebug("%s", Q_FUNC_INFO); - ssh->close(m_channel); + ssh.close(m_channel); } const char *MaemoSshConnection::lastError() { - return ssh->errors()->pop(channel()); + return ssh.errors()->pop(channel()); } void MaemoSshConnection::stop() @@ -103,31 +104,35 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo : MaemoSshConnection(devConf, true), m_prompt(0) { m_prompt = devConf.uname == QLatin1String("root") ? "# " : "$ "; - if (!ssh->waitFor(channel(), m_prompt, devConf.timeout)) - throw MaemoSshException(tr("Could not start remote shell: %1").arg(lastError())); + if (!ssh.waitFor(channel(), m_prompt, devConf.timeout)) { + const QString error + = tr("Could not start remote shell: %1").arg(lastError()); + throw MaemoSshException(error); + } } MaemoInteractiveSshConnection::~MaemoInteractiveSshConnection() { - ssh->send("exit\n", channel()); - ssh->waitFor(channel(), m_prompt, 1); + ssh.send("exit\n", channel()); + ssh.waitFor(channel(), m_prompt, 1); } void MaemoInteractiveSshConnection::runCommand(const QString &command) { - if (!ssh->send((command + QLatin1String("\n")).toLatin1().data(), - channel())) { - throw MaemoSshException(tr("Error running command: %1").arg(lastError())); + if (!ssh.send((command + QLatin1String("\n")).toLatin1().data(), + channel())) { + throw MaemoSshException(tr("Error running command: %1") + .arg(lastError())); } bool done; do { - done = ssh->waitFor(channel(), m_prompt, 1); + done = ssh.waitFor(channel(), m_prompt, 1); const char * const error = lastError(); if (error) throw MaemoSshException(tr("SSH error: %1").arg(error)); QScopedPointer<char, QScopedPointerArrayDeleter<char> > - output(ssh->readAndReset(channel(), alloc)); + output(ssh.readAndReset(channel(), alloc)); if (output.data()) { emit remoteOutput(QString::fromUtf8(output.data())); if (!done) @@ -145,10 +150,9 @@ MaemoSftpConnection::MaemoSftpConnection(const MaemoDeviceConfig &devConf) : MaemoSshConnection(devConf, false), sftp(new Ne7SftpSubsystem) { - if (!ssh->initSftp(*sftp, channel()) || !sftp->setTimeout(devConf.timeout)) { + if (!ssh.initSftp(*sftp, channel()) || !sftp->setTimeout(devConf.timeout)) throw MaemoSshException(tr("Error setting up SFTP subsystem: %1") .arg(lastError())); - } } MaemoSftpConnection::~MaemoSftpConnection() diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h index c6119ec0e55..ff13095b7bc 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h @@ -47,7 +47,6 @@ #include <QtCore/QSharedPointer> #include <QtCore/QString> -class ne7ssh; class Ne7SftpSubsystem; namespace Qt4ProjectManager { @@ -80,8 +79,6 @@ protected: bool stopRequested() const {return m_stopRequested; } const char *lastError(); - QScopedPointer<ne7ssh> ssh; - private: int m_channel; volatile bool m_stopRequested; -- GitLab