forked from qt-creator/qt-creator
Fix crash in sshconnectionmanager
Change-Id: I1cd3cc8eb93342685b14e41881d12852584adef4 Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
This commit is contained in:
@@ -40,28 +40,10 @@
|
|||||||
#include <QtCore/QMutexLocker>
|
#include <QtCore/QMutexLocker>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QThread>
|
#include <QtCore/QThread>
|
||||||
#include <QtCore/QTimer>
|
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
struct ConnectionInfo
|
|
||||||
{
|
|
||||||
typedef QSharedPointer<ConnectionInfo> Ptr;
|
|
||||||
static ConnectionInfo::Ptr create(const SshConnection::Ptr &conn)
|
|
||||||
{
|
|
||||||
return Ptr(new ConnectionInfo(conn));
|
|
||||||
}
|
|
||||||
|
|
||||||
SshConnection::Ptr connection;
|
|
||||||
int refCount;
|
|
||||||
bool isConnecting;
|
|
||||||
|
|
||||||
private:
|
|
||||||
ConnectionInfo(const SshConnection::Ptr &conn)
|
|
||||||
: connection(conn), refCount(1), isConnecting(false) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class SshConnectionManagerPrivate : public QObject
|
class SshConnectionManagerPrivate : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -78,8 +60,6 @@ public:
|
|||||||
SshConnectionManagerPrivate()
|
SshConnectionManagerPrivate()
|
||||||
{
|
{
|
||||||
moveToThread(QCoreApplication::instance()->thread());
|
moveToThread(QCoreApplication::instance()->thread());
|
||||||
connect(&m_cleanupTimer, SIGNAL(timeout()), SLOT(cleanup()));
|
|
||||||
m_cleanupTimer.start(5*60*1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSharedPointer<SshConnection> acquireConnection(const SshConnectionParameters &sshParams)
|
QSharedPointer<SshConnection> acquireConnection(const SshConnectionParameters &sshParams)
|
||||||
@@ -188,11 +168,14 @@ private slots:
|
|||||||
{
|
{
|
||||||
QMutexLocker locker(&m_listMutex);
|
QMutexLocker locker(&m_listMutex);
|
||||||
|
|
||||||
SshConnection::Ptr connection(static_cast<SshConnection *>(sender()));
|
SshConnection *currentConnection = qobject_cast<SshConnection *>(sender());
|
||||||
if (connection.isNull())
|
if (!currentConnection)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_unacquiredConnections.removeAll(connection);
|
for (int i = m_unacquiredConnections.count() - 1; i >= 0; --i) {
|
||||||
|
if (m_unacquiredConnections.at(i) == currentConnection)
|
||||||
|
m_unacquiredConnections.removeAt(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -202,9 +185,7 @@ private:
|
|||||||
QList<SshConnection::Ptr> m_unacquiredConnections;
|
QList<SshConnection::Ptr> m_unacquiredConnections;
|
||||||
QList<SshConnection::Ptr> m_acquiredConnections;
|
QList<SshConnection::Ptr> m_acquiredConnections;
|
||||||
QList<SshConnection::Ptr> m_deprecatedConnections;
|
QList<SshConnection::Ptr> m_deprecatedConnections;
|
||||||
|
|
||||||
QMutex m_listMutex;
|
QMutex m_listMutex;
|
||||||
QTimer m_cleanupTimer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QMutex SshConnectionManagerPrivate::instanceMutex;
|
QMutex SshConnectionManagerPrivate::instanceMutex;
|
||||||
|
|||||||
Reference in New Issue
Block a user