diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp index 12cbc9157..a980d43a7 100644 --- a/src/libtomahawk/network/servent.cpp +++ b/src/libtomahawk/network/servent.cpp @@ -443,7 +443,7 @@ Servent::socketConnected() // qDebug() << "Servent::SocketConnected" << thread() << "socket:" << sock; - Connection* conn = sock->_conn; + Connection* conn = sock->_conn.data(); handoverSocket( conn, sock ); } @@ -472,28 +472,31 @@ void Servent::handoverSocket( Connection* conn, QTcpSocketExtra* sock ) void Servent::socketError( QAbstractSocket::SocketError e ) { - qDebug() << Q_FUNC_INFO; QTcpSocketExtra* sock = (QTcpSocketExtra*)sender(); - if( !sock ) + if ( !sock ) { tLog() << "SocketError, sock is null"; return; } - Connection* conn = sock->_conn; - if ( !conn ) + if ( !sock->_conn.isNull() ) + { + Connection* conn = sock->_conn.data(); + tLog() << "Servent::SocketError:" << e << conn->id() << conn->name(); + + if ( !sock->_disowned ) + { + // connection will delete if we already transferred ownership, otherwise: + sock->deleteLater(); + } + + conn->markAsFailed(); // will emit failed, then finished + } + else { tLog() << "SocketError, connection is null"; - return; - } - - tLog() << "Servent::SocketError:" << e << conn->id() << conn->name(); - if( !sock->_disowned ) - { - // connection will delete if we already transferred ownership, otherwise: sock->deleteLater(); } - conn->markAsFailed(); // will emit failed, then finished } diff --git a/src/libtomahawk/network/servent.h b/src/libtomahawk/network/servent.h index f432e3f3e..3c668bad6 100644 --- a/src/libtomahawk/network/servent.h +++ b/src/libtomahawk/network/servent.h @@ -63,7 +63,7 @@ public: QTimer::singleShot( AUTH_TIMEOUT, this, SLOT( authTimeout() ) ) ; } - Connection* _conn; + QWeakPointer _conn; bool _outbound; bool _disowned; msg_ptr _msg;