diff --git a/src/plugins/coreplugin/ssh/sshconnection.cpp b/src/plugins/coreplugin/ssh/sshconnection.cpp index fbf63d76705..f975b031c6b 100644 --- a/src/plugins/coreplugin/ssh/sshconnection.cpp +++ b/src/plugins/coreplugin/ssh/sshconnection.cpp @@ -241,6 +241,8 @@ void SshConnectionPrivate::handleIncomingData() return; // For stuff queued in the event loop after we've called closeConnection(); try { + if (!canUseSocket()) + return; m_incomingData += m_socket->readAll(); #ifdef CREATOR_SSH_DEBUG qDebug("state = %d, remote data size = %d", m_state, @@ -478,7 +480,8 @@ void SshConnectionPrivate::handleDisconnect() void SshConnectionPrivate::sendData(const QByteArray &data) { - m_socket->write(data); + if (canUseSocket()) + m_socket->write(data); } void SshConnectionPrivate::handleSocketDisconnected() @@ -543,10 +546,17 @@ void SshConnectionPrivate::closeConnection(SshErrorCode sshError, emit error(userError); if (m_state == ConnectionEstablished) emit disconnected(); - m_socket->disconnectFromHost(); + if (canUseSocket()) + m_socket->disconnectFromHost(); m_state = SocketUnconnected; } +bool SshConnectionPrivate::canUseSocket() const +{ + return m_socket->isValid() + && m_socket->state() == QAbstractSocket::ConnectedState; +} + QSharedPointer SshConnectionPrivate::createRemoteProcess(const QByteArray &command) { return m_channelManager->createRemoteProcess(command); diff --git a/src/plugins/coreplugin/ssh/sshconnection_p.h b/src/plugins/coreplugin/ssh/sshconnection_p.h index c20ccf78b52..cd9e3d771cd 100644 --- a/src/plugins/coreplugin/ssh/sshconnection_p.h +++ b/src/plugins/coreplugin/ssh/sshconnection_p.h @@ -124,6 +124,7 @@ private: void handleChannelEof(); void handleChannelClose(); void handleDisconnect(); + bool canUseSocket() const; void sendData(const QByteArray &data); diff --git a/src/plugins/coreplugin/ssh/sshsendfacility.cpp b/src/plugins/coreplugin/ssh/sshsendfacility.cpp index 3c793af24d7..2d1af27b3be 100644 --- a/src/plugins/coreplugin/ssh/sshsendfacility.cpp +++ b/src/plugins/coreplugin/ssh/sshsendfacility.cpp @@ -48,8 +48,11 @@ void SshSendFacility::sendPacket() #ifdef CREATOR_SSH_DEBUG qDebug("Sending packet, client seq nr is %u", m_clientSeqNr); #endif - m_socket->write(m_outgoingPacket.rawData()); - ++m_clientSeqNr; + if (m_socket->isValid() + && m_socket->state() == QAbstractSocket::ConnectedState) { + m_socket->write(m_outgoingPacket.rawData()); + ++m_clientSeqNr; + } } void SshSendFacility::reset()