From d71a237533c396e74488a7bc97d6fd3ea5c5d802 Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Tue, 14 May 2013 13:06:27 +0200 Subject: [PATCH] Handle disconnects during connection attempts (i.e. vanishing connection objects) --- src/libtomahawk/network/Servent.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libtomahawk/network/Servent.cpp b/src/libtomahawk/network/Servent.cpp index c72798153..aaa77c12c 100644 --- a/src/libtomahawk/network/Servent.cpp +++ b/src/libtomahawk/network/Servent.cpp @@ -851,7 +851,11 @@ Servent::connectToPeer(const peerinfo_ptr& peerInfo, const QList& sipIn { if ( sipInfos.isEmpty() ) { - tLog( LOGVERBOSE ) << Q_FUNC_INFO << "No more possible SIP endpoints for " << conn->name() << " skipping."; + if ( conn != NULL ) { + tLog( LOGVERBOSE ) << Q_FUNC_INFO << "No more possible SIP endpoints for " << conn->name() << " skipping."; + } else { + tLog( LOGVERBOSE ) << Q_FUNC_INFO << "No more possible SIP endpoints for skipping."; + } // If a peerinfo was supplied and has a ControlConnection which should be destroyed, than use this if ( !peerInfo.isNull() && peerInfo->controlConnection() ) delete peerInfo->controlConnection(); @@ -922,10 +926,13 @@ Servent::connectToPeer(const peerinfo_ptr& peerInfo, const QList& sipIn void Servent::connectToPeerFailed( const peerinfo_ptr& peerInfo, QList sipInfo, Connection* conn, QTcpSocketExtra* socket ) { + bool connIsNull = socket->_conn.isNull(); cleanupSocket( socket ); - // Try next SipInfo - connectToPeer( peerInfo, sipInfo, conn ); + if ( !connIsNull ) { + // Try next SipInfo (don't do this if the connection was destroyed in between) + connectToPeer( peerInfo, sipInfo, conn ); + } } void