From: Marcus Eggenberger Date: Sun, 21 Oct 2007 13:05:46 +0000 (+0000) Subject: Added Q_ASSERT when catching destroyed signals. There seems to be a problem in some... X-Git-Tag: 0.1.0~107 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=988bcf1fc63b31947e3ce816c456c1b1a919d8ef;hp=8a618fb4514d83a76cec8e7cd1319b935366a616 Added Q_ASSERT when catching destroyed signals. There seems to be a problem in some cases. Simplified the handling too. --- diff --git a/src/common/ircchannel.cpp b/src/common/ircchannel.cpp index 95d0ed11..2233861b 100644 --- a/src/common/ircchannel.cpp +++ b/src/common/ircchannel.cpp @@ -192,7 +192,11 @@ void IrcChannel::initSetUserModes(const QVariantMap &usermodes) { } void IrcChannel::ircUserDestroyed() { - part(qobject_cast(sender())); + IrcUser *ircUser = qobject_cast(sender()); + // in case this assert triggers we probably need a static_cast + // dynamic_casts seem to screw things up when using the destroyed signal + Q_ASSERT(ircUser); + part(ircUser); } void IrcChannel::setInitialized() { diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 114287ac..9db9f164 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -299,6 +299,7 @@ IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) { void NetworkInfo::ircUserNickChanged(QString newnick) { QString oldnick = _ircUsers.key(qobject_cast(sender())); + if(oldnick.isNull()) return; @@ -310,26 +311,18 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { void NetworkInfo::ircUserDestroyed() { IrcUser *ircuser = qobject_cast(sender()); - QHash::iterator i = _ircUsers.begin(); - while(i != _ircUsers.end()) { - if(i.value() == ircuser) { - i = _ircUsers.erase(i); - } else { - i++; - } - } + // in case this assert triggers we probably need a static_cast + // dynamic_casts seem to screw things up when using the destroyed signal + Q_ASSERT(ircuser); + _ircUsers.remove(_ircUsers.key(ircuser); } void NetworkInfo::channelDestroyed() { IrcChannel *channel = qobject_cast(sender()); - QHash::iterator i = _ircChannels.begin(); - while(i != _ircChannels.end()) { - if(i.value() == channel) { - i = _ircChannels.erase(i); - } else { - i++; - } - } + // in case this assert triggers we probably need a static_cast + // dynamic_casts seem to screw things up when using the destroyed signal + Q_ASSERT(channel); + _ircChannels.remove(_ircChannels.key(channel)); } void NetworkInfo::setInitialized() {