projects
/
quassel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This should fix a bug resulting in a crash, when a IrcUser object was not destroyed...
[quassel.git]
/
src
/
common
/
networkinfo.cpp
diff --git
a/src/common/networkinfo.cpp
b/src/common/networkinfo.cpp
index
0ef2f1f
..
a6e311a
100644
(file)
--- a/
src/common/networkinfo.cpp
+++ b/
src/common/networkinfo.cpp
@@
-166,6
+166,7
@@
IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
QString nick(nickFromMask(hostmask));
if(!_ircUsers.contains(nick)) {
IrcUser *ircuser = new IrcUser(hostmask, this);
QString nick(nickFromMask(hostmask));
if(!_ircUsers.contains(nick)) {
IrcUser *ircuser = new IrcUser(hostmask, this);
+ qDebug() << "new IrcUser()" << ircuser << hostmask;
// mark IrcUser as already initialized to keep the SignalProxy from requesting initData
if(initialized())
ircuser->setInitialized();
// mark IrcUser as already initialized to keep the SignalProxy from requesting initData
if(initialized())
ircuser->setInitialized();
@@
-183,12
+184,20
@@
IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
return _ircUsers[nick];
}
return _ircUsers[nick];
}
+void NetworkInfo::removeIrcUser(IrcUser *ircuser) {
+ QString nick = _ircUsers.key(ircuser);
+ if(nick.isNull())
+ return;
+
+ _ircUsers.remove(nick);
+ ircuser->deleteLater();
+ emit ircUserRemoved(nick);
+}
+
void NetworkInfo::removeIrcUser(QString nick) {
IrcUser *ircuser;
void NetworkInfo::removeIrcUser(QString nick) {
IrcUser *ircuser;
- if((ircuser = ircUser(nick)) != 0) {
- ircuser->deleteLater();
- emit ircUserRemoved(nick);
- }
+ if((ircuser = ircUser(nick)) != 0)
+ removeIrcUser(ircuser);
}
IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
}
IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
@@
-315,10
+324,13
@@
IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) {
QString nick(nickFromMask(mask));
IrcUser *ircuser;
QString nick(nickFromMask(mask));
IrcUser *ircuser;
+ qDebug() << "NetworkInfo::updateNickFromMask()" << mask;
if(_ircUsers.contains(nick)) {
if(_ircUsers.contains(nick)) {
+ qDebug() << " is known User";
ircuser = _ircUsers[nick];
ircuser->updateHostmask(mask);
} else {
ircuser = _ircUsers[nick];
ircuser->updateHostmask(mask);
} else {
+ qDebug() << " is new User";
ircuser = newIrcUser(mask);
}
return ircuser;
ircuser = newIrcUser(mask);
}
return ircuser;
@@
-339,9
+351,8
@@
void NetworkInfo::ircUserNickChanged(QString newnick) {
void NetworkInfo::ircUserDestroyed() {
IrcUser *ircuser = static_cast<IrcUser *>(sender());
Q_ASSERT(ircuser);
void NetworkInfo::ircUserDestroyed() {
IrcUser *ircuser = static_cast<IrcUser *>(sender());
Q_ASSERT(ircuser);
- QString nick = _ircUsers.key(ircuser);
- _ircUsers.remove(nick);
- emit ircUserRemoved(nick);
+ qDebug() << "NetworkInfo::ircUserDestroyed()" << ircuser;
+ removeIrcUser(ircuser);
}
void NetworkInfo::channelDestroyed() {
}
void NetworkInfo::channelDestroyed() {