1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-04 21:27:58 +02:00

* This should fix crashes / asserts in Servent.

This commit is contained in:
Christian Muehlhaeuser
2013-01-27 19:07:22 +01:00
parent 168c4f7ab7
commit 1fad16f9ee

View File

@@ -254,7 +254,9 @@ void
Servent::registerControlConnection( ControlConnection* conn ) Servent::registerControlConnection( ControlConnection* conn )
{ {
Q_ASSERT( conn ); Q_ASSERT( conn );
m_controlconnections.append( conn ); tLog( LOGVERBOSE ) << Q_FUNC_INFO << conn->name();
m_controlconnections << conn;
m_connectedNodes << conn->id();
} }
@@ -262,6 +264,7 @@ void
Servent::unregisterControlConnection( ControlConnection* conn ) Servent::unregisterControlConnection( ControlConnection* conn )
{ {
Q_ASSERT( conn ); Q_ASSERT( conn );
tLog( LOGVERBOSE ) << Q_FUNC_INFO << conn->name();
m_connectedNodes.removeAll( conn->id() ); m_connectedNodes.removeAll( conn->id() );
m_controlconnections.removeAll( conn ); m_controlconnections.removeAll( conn );
} }
@@ -481,8 +484,7 @@ Servent::readyRead()
foreach ( ControlConnection* con, m_controlconnections ) foreach ( ControlConnection* con, m_controlconnections )
{ {
if ( !con ) Q_ASSERT( con );
continue;
tLog() << "known connection:" << con->id(); tLog() << "known connection:" << con->id();
if ( con->id() == nodeid ) if ( con->id() == nodeid )
@@ -529,7 +531,9 @@ Servent::readyRead()
foreach ( ControlConnection* con, m_controlconnections ) foreach ( ControlConnection* con, m_controlconnections )
{ {
if ( con && con->id() == controlid ) Q_ASSERT( con );
if ( con->id() == controlid )
{ {
cc = con; cc = con;
break; break;
@@ -559,11 +563,11 @@ Servent::readyRead()
} }
tDebug( LOGVERBOSE ) << "claimOffer OK:" << key << nodeid; tDebug( LOGVERBOSE ) << "claimOffer OK:" << key << nodeid;
registerControlConnection( qobject_cast<ControlConnection*>(conn) );
m_connectedNodes << nodeid;
if ( !nodeid.isEmpty() ) if ( !nodeid.isEmpty() )
{
conn->setId( nodeid ); conn->setId( nodeid );
registerControlConnection( qobject_cast<ControlConnection*>(conn) );
}
handoverSocket( conn, sock.data() ); handoverSocket( conn, sock.data() );
return; return;
@@ -749,20 +753,19 @@ Servent::connectToPeer( const peerinfo_ptr& peerInfo )
m["nodeid"] = Database::instance()->impl()->dbid(); m["nodeid"] = Database::instance()->impl()->dbid();
peerInfoDebug(peerInfo) << "No match found, creating a new ControlConnection..."; peerInfoDebug(peerInfo) << "No match found, creating a new ControlConnection...";
conn = new ControlConnection( this ); conn = new ControlConnection( this );
conn->addPeerInfo( peerInfo ); conn->addPeerInfo( peerInfo );
conn->setFirstMessage( m ); conn->setFirstMessage( m );
if ( peerInfo->id().length() ) if ( peerInfo->id().length() )
conn->setName( peerInfo->id() ); conn->setName( peerInfo->id() );
if ( sipInfo.uniqname().length() ) if ( sipInfo.uniqname().length() )
conn->setId( sipInfo.uniqname() ); conn->setId( sipInfo.uniqname() );
conn->setProperty( "nodeid", sipInfo.uniqname() ); conn->setProperty( "nodeid", sipInfo.uniqname() );
registerControlConnection( conn ); registerControlConnection( conn );
connectToPeer( sipInfo.host(), sipInfo.port(), sipInfo.key(), conn ); connectToPeer( sipInfo.host(), sipInfo.port(), sipInfo.key(), conn );
} }