|
@@ -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<Multicaster::Key,MulticastGroupStatus>::Iterator mm(_groups);
|
|
|
- while (mm.next(k,s)) {
|
|
|
- for(std::list<OutboundMulticast>::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<Multicaster::Key,MulticastGroupStatus>::Iterator mm(_groups);
|
|
|
+ while (mm.next(k,s)) {
|
|
|
+ for(std::list<OutboundMulticast>::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<MulticastGroupMember>::iterator reader(s->members.begin());
|
|
|
- std::vector<MulticastGroupMember>::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<MulticastGroupMember>::iterator reader(s->members.begin());
|
|
|
+ std::vector<MulticastGroupMember>::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();
|
|
|
}
|
|
|
}
|
|
|
}
|