mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 03:53:44 +02:00
Fix some timestamp signedness mismatches.
This commit is contained in:
parent
d2f2abe525
commit
9480ff1f37
2 changed files with 30 additions and 32 deletions
|
@ -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();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue