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