Fix some timestamp signedness mismatches.

This commit is contained in:
Adam Ierymenko 2020-11-11 11:46:09 -05:00
parent d2f2abe525
commit 9480ff1f37
No known key found for this signature in database
GPG key ID: C8877CF2D7A5D7F3
2 changed files with 30 additions and 32 deletions

View file

@ -371,39 +371,37 @@ void Multicaster::send(
void Multicaster::clean(int64_t now) void Multicaster::clean(int64_t now)
{ {
{ Mutex::Lock _l(_groups_m);
Mutex::Lock _l(_groups_m); Multicaster::Key *k = (Multicaster::Key *)0;
Multicaster::Key *k = (Multicaster::Key *)0; MulticastGroupStatus *s = (MulticastGroupStatus *)0;
MulticastGroupStatus *s = (MulticastGroupStatus *)0; Hashtable<Multicaster::Key,MulticastGroupStatus>::Iterator mm(_groups);
Hashtable<Multicaster::Key,MulticastGroupStatus>::Iterator mm(_groups); while (mm.next(k,s)) {
while (mm.next(k,s)) { for(std::list<OutboundMulticast>::iterator tx(s->txQueue.begin());tx!=s->txQueue.end();) {
for(std::list<OutboundMulticast>::iterator tx(s->txQueue.begin());tx!=s->txQueue.end();) { if ((tx->expired(now))||(tx->atLimit()))
if ((tx->expired(now))||(tx->atLimit())) s->txQueue.erase(tx++);
s->txQueue.erase(tx++); else ++tx;
else ++tx; }
}
unsigned long count = 0; unsigned long count = 0;
{ {
std::vector<MulticastGroupMember>::iterator reader(s->members.begin()); std::vector<MulticastGroupMember>::iterator reader(s->members.begin());
std::vector<MulticastGroupMember>::iterator writer(reader); std::vector<MulticastGroupMember>::iterator writer(reader);
while (reader != s->members.end()) { while (reader != s->members.end()) {
if ((now - reader->timestamp) < ZT_MULTICAST_LIKE_EXPIRE) { if ((now - reader->timestamp) < ZT_MULTICAST_LIKE_EXPIRE) {
*writer = *reader; *writer = *reader;
++writer; ++writer;
++count; ++count;
}
++reader;
} }
++reader;
} }
}
if (count) { if (count) {
s->members.resize(count); s->members.resize(count);
} else if (s->txQueue.empty()) { } else if (s->txQueue.empty()) {
_groups.erase(*k); _groups.erase(*k);
} else { } else {
s->members.clear(); s->members.clear();
}
} }
} }
} }

View file

@ -138,7 +138,7 @@ public:
unsigned int len); unsigned int len);
/** /**
* Clean up and resort database * Clean database
* *
* @param RR Runtime environment * @param RR Runtime environment
* @param now Current time * @param now Current time
@ -172,14 +172,14 @@ private:
inline bool operator!=(const Address &a) const { return (address != a); } inline bool operator!=(const Address &a) const { return (address != a); }
Address address; Address address;
uint64_t timestamp; // time of last notification int64_t timestamp; // time of last notification
}; };
struct MulticastGroupStatus struct MulticastGroupStatus
{ {
MulticastGroupStatus() : lastExplicitGather(0) {} MulticastGroupStatus() : lastExplicitGather(0) {}
uint64_t lastExplicitGather; int64_t lastExplicitGather;
std::list<OutboundMulticast> txQueue; // pending outbound multicasts std::list<OutboundMulticast> txQueue; // pending outbound multicasts
std::vector<MulticastGroupMember> members; // members of this group std::vector<MulticastGroupMember> members; // members of this group
}; };