X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=d7b9cb19787c8cdbb74d6d77aae3ab4ed27010f5;hp=94cf39eb8fa8bb2a62f4024f74c8b2f099e478cc;hb=cf7c5679c2475bb563cd64e15477c485d89368a3;hpb=997a62b68d7469a93f373476dd955c44eb051be0 diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 94cf39eb..d7b9cb19 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -248,8 +248,12 @@ void CoreSession::networkConnected(NetworkId networkid) { // called now only on /quit and requested disconnects, not on normal disconnects! void CoreSession::networkDisconnected(NetworkId networkid) { - Core::setNetworkConnected(user(), networkid, false); - if(_connections.contains(networkid)) _connections.take(networkid)->deleteLater(); + // if the network has already been removed, we don't have a networkconnection left either, so we don't do anything + // make sure to not depend on the network still existing when calling this function! + if(_connections.contains(networkid)) { + Core::setNetworkConnected(user(), networkid, false); + _connections.take(networkid)->deleteLater(); + } } void CoreSession::channelJoined(NetworkId id, const QString &channel, const QString &key) { @@ -433,7 +437,10 @@ void CoreSession::removeNetwork(NetworkId id) { } void CoreSession::destroyNetwork(NetworkId id) { - Q_ASSERT(!_connections.contains(id)); + if(_connections.contains(id)) { + // this can happen if the network was reconnecting while being removed + _connections.take(id)->deleteLater(); + } Network *net = _networks.take(id); if(net && Core::removeNetwork(user(), id)) { emit networkRemoved(id);