summaryrefslogtreecommitdiff
path: root/node/Multicaster.cpp
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2018-12-06 13:08:39 -0800
committerGrant Limberg <grant.limberg@zerotier.com>2018-12-06 13:08:39 -0800
commit20f02bb772cde179b6d58f33199aaaead3abba87 (patch)
tree65a49e7f4ebb61628e6c29056380f974f54dc3ea /node/Multicaster.cpp
parent1c86f25fab57f4c2bc3f314683a911959f90b9b8 (diff)
parente6f9ab929df19ba667441b005ae2b9771922a92c (diff)
downloadinfinitytier-20f02bb772cde179b6d58f33199aaaead3abba87.tar.gz
infinitytier-20f02bb772cde179b6d58f33199aaaead3abba87.zip
Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev
Diffstat (limited to 'node/Multicaster.cpp')
-rw-r--r--node/Multicaster.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp
index b2a5a205..2b5fb041 100644
--- a/node/Multicaster.cpp
+++ b/node/Multicaster.cpp
@@ -444,15 +444,17 @@ void Multicaster::_add(void *tPtr,int64_t now,uint64_t nwid,const MulticastGroup
if (member == RR->identity.address())
return;
- for(std::vector<MulticastGroupMember>::iterator m(gs.members.begin());m!=gs.members.end();++m) {
+ std::vector<MulticastGroupMember>::iterator m(std::lower_bound(gs.members.begin(),gs.members.end(),member));
+ if (m != gs.members.end()) {
if (m->address == member) {
m->timestamp = now;
return;
}
+ gs.members.insert(m,MulticastGroupMember(member,now));
+ } else {
+ gs.members.push_back(MulticastGroupMember(member,now));
}
- gs.members.push_back(MulticastGroupMember(member,now));
-
for(std::list<OutboundMulticast>::iterator tx(gs.txQueue.begin());tx!=gs.txQueue.end();) {
if (tx->atLimit())
gs.txQueue.erase(tx++);