summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-05-07 07:59:39 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-05-07 07:59:39 (GMT)
commit5409f27bbc3b32a65b2feed3259b1cc15da888a3 (patch)
tree3f2475d0eac1e3679b5c48c0c3633264f0497700 /Swiften/Roster/Roster.cpp
parenta49e2a1d4d17c36fad6ac1d1313fac955f675a54 (diff)
downloadswift-5409f27bbc3b32a65b2feed3259b1cc15da888a3.zip
swift-5409f27bbc3b32a65b2feed3259b1cc15da888a3.tar.bz2
Fix hang on MUC users leaving
Diffstat (limited to 'Swiften/Roster/Roster.cpp')
-rw-r--r--Swiften/Roster/Roster.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/Swiften/Roster/Roster.cpp b/Swiften/Roster/Roster.cpp
index c25fd41..9226a63 100644
--- a/Swiften/Roster/Roster.cpp
+++ b/Swiften/Roster/Roster.cpp
@@ -75,15 +75,15 @@ void Roster::addContact(const JID& jid, const String& name, const String& groupN
filterContact(item, group);
}
+struct JIDEqualsTo {
+ JIDEqualsTo(const JID& jid) : jid(jid) {}
+ bool operator()(ContactRosterItem* i) const { return jid == i->getJID(); }
+ JID jid;
+};
void Roster::removeContact(const JID& jid) {
std::vector<ContactRosterItem*> items = itemMap_[jid.toBare()];
- std::vector<ContactRosterItem*>::iterator it = items.begin();
- while (it != items.end()) {
- if (jid == (*it)->getJID()) {
- it = items.erase(it);
- }
- }
+ items.erase(std::remove_if(items.begin(), items.end(), JIDEqualsTo(jid)), items.end());
if (items.size() == 0) {
itemMap_.erase(jid.toBare());
}