diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp index 3b48b799e..8556acc67 100644 --- a/node/Multicaster.cpp +++ b/node/Multicaster.cpp @@ -371,39 +371,37 @@ void Multicaster::send( void Multicaster::clean(int64_t now) { - { - Mutex::Lock _l(_groups_m); - Multicaster::Key *k = (Multicaster::Key *)0; - MulticastGroupStatus *s = (MulticastGroupStatus *)0; - Hashtable::Iterator mm(_groups); - while (mm.next(k,s)) { - for(std::list::iterator tx(s->txQueue.begin());tx!=s->txQueue.end();) { - if ((tx->expired(now))||(tx->atLimit())) - s->txQueue.erase(tx++); - else ++tx; - } + Mutex::Lock _l(_groups_m); + Multicaster::Key *k = (Multicaster::Key *)0; + MulticastGroupStatus *s = (MulticastGroupStatus *)0; + Hashtable::Iterator mm(_groups); + while (mm.next(k,s)) { + for(std::list::iterator tx(s->txQueue.begin());tx!=s->txQueue.end();) { + if ((tx->expired(now))||(tx->atLimit())) + s->txQueue.erase(tx++); + else ++tx; + } - unsigned long count = 0; - { - std::vector::iterator reader(s->members.begin()); - std::vector::iterator writer(reader); - while (reader != s->members.end()) { - if ((now - reader->timestamp) < ZT_MULTICAST_LIKE_EXPIRE) { - *writer = *reader; - ++writer; - ++count; - } - ++reader; + unsigned long count = 0; + { + std::vector::iterator reader(s->members.begin()); + std::vector::iterator writer(reader); + while (reader != s->members.end()) { + if ((now - reader->timestamp) < ZT_MULTICAST_LIKE_EXPIRE) { + *writer = *reader; + ++writer; + ++count; } + ++reader; } + } - if (count) { - s->members.resize(count); - } else if (s->txQueue.empty()) { - _groups.erase(*k); - } else { - s->members.clear(); - } + if (count) { + s->members.resize(count); + } else if (s->txQueue.empty()) { + _groups.erase(*k); + } else { + s->members.clear(); } } } diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp index 55c09eb3b..5809c67fc 100644 --- a/node/Multicaster.hpp +++ b/node/Multicaster.hpp @@ -138,7 +138,7 @@ public: unsigned int len); /** - * Clean up and resort database + * Clean database * * @param RR Runtime environment * @param now Current time @@ -172,14 +172,14 @@ private: inline bool operator!=(const Address &a) const { return (address != a); } Address address; - uint64_t timestamp; // time of last notification + int64_t timestamp; // time of last notification }; struct MulticastGroupStatus { MulticastGroupStatus() : lastExplicitGather(0) {} - uint64_t lastExplicitGather; + int64_t lastExplicitGather; std::list txQueue; // pending outbound multicasts std::vector members; // members of this group };