mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 12:33:44 +02:00
Turns out that needed to be a list after all. Also clean up Multicaster::gather().
This commit is contained in:
parent
3f7e7e8a88
commit
e7c81ef34e
3 changed files with 9 additions and 7 deletions
|
@ -66,12 +66,13 @@ unsigned int Multicaster::gather(const RuntimeEnvironment *RR,const Address &que
|
||||||
|
|
||||||
if (limit > gs->second.members.size())
|
if (limit > gs->second.members.size())
|
||||||
limit = (unsigned int)gs->second.members.size();
|
limit = (unsigned int)gs->second.members.size();
|
||||||
if (limit > 0xffff) // sanity check -- this won't fit in a packet anyway
|
if (limit > ((ZT_PROTO_MAX_PACKET_LENGTH / 5) + 1))
|
||||||
limit = 0xffff;
|
limit = (ZT_PROTO_MAX_PACKET_LENGTH / 5) + 1;
|
||||||
|
|
||||||
appendTo.append((uint32_t)gs->second.members.size());
|
unsigned int totalAt = appendTo.size();
|
||||||
|
appendTo.addSize(4); // sizeof(uint32_t)
|
||||||
unsigned int nAt = appendTo.size();
|
unsigned int nAt = appendTo.size();
|
||||||
appendTo.append((uint16_t)0); // set to n later
|
appendTo.addSize(2); // sizeof(uint16_t)
|
||||||
|
|
||||||
while ((n < limit)&&((appendTo.size() + ZT_ADDRESS_LENGTH) <= ZT_PROTO_MAX_PACKET_LENGTH)) {
|
while ((n < limit)&&((appendTo.size() + ZT_ADDRESS_LENGTH) <= ZT_PROTO_MAX_PACKET_LENGTH)) {
|
||||||
// Pick a member at random -- if we've already picked it,
|
// Pick a member at random -- if we've already picked it,
|
||||||
|
@ -103,6 +104,7 @@ restart_member_scan:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appendTo.setAt(totalAt,(uint32_t)(gs->second.members.size() - skipped));
|
||||||
appendTo.setAt(nAt,(uint16_t)(n - skipped));
|
appendTo.setAt(nAt,(uint16_t)(n - skipped));
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
|
|
@ -440,7 +440,7 @@ void Switch::doAnythingWaitingForPeer(const SharedPtr<Peer> &peer)
|
||||||
|
|
||||||
{ // finish processing any packets waiting on peer's public key / identity
|
{ // finish processing any packets waiting on peer's public key / identity
|
||||||
Mutex::Lock _l(_rxQueue_m);
|
Mutex::Lock _l(_rxQueue_m);
|
||||||
for(std::vector< SharedPtr<IncomingPacket> >::iterator rxi(_rxQueue.begin());rxi!=_rxQueue.end();) {
|
for(std::list< SharedPtr<IncomingPacket> >::iterator rxi(_rxQueue.begin());rxi!=_rxQueue.end();) {
|
||||||
if ((*rxi)->tryDecode(RR))
|
if ((*rxi)->tryDecode(RR))
|
||||||
_rxQueue.erase(rxi++);
|
_rxQueue.erase(rxi++);
|
||||||
else ++rxi;
|
else ++rxi;
|
||||||
|
@ -527,7 +527,7 @@ unsigned long Switch::doTimerTasks()
|
||||||
|
|
||||||
{
|
{
|
||||||
Mutex::Lock _l(_rxQueue_m);
|
Mutex::Lock _l(_rxQueue_m);
|
||||||
for(std::vector< SharedPtr<IncomingPacket> >::iterator i(_rxQueue.begin());i!=_rxQueue.end();) {
|
for(std::list< SharedPtr<IncomingPacket> >::iterator i(_rxQueue.begin());i!=_rxQueue.end();) {
|
||||||
if ((now - (*i)->receiveTime()) > ZT_RECEIVE_QUEUE_TIMEOUT) {
|
if ((now - (*i)->receiveTime()) > ZT_RECEIVE_QUEUE_TIMEOUT) {
|
||||||
TRACE("RX %s -> %s timed out",(*i)->source().toString().c_str(),(*i)->destination().toString().c_str());
|
TRACE("RX %s -> %s timed out",(*i)->source().toString().c_str(),(*i)->destination().toString().c_str());
|
||||||
_rxQueue.erase(i++);
|
_rxQueue.erase(i++);
|
||||||
|
|
|
@ -242,7 +242,7 @@ private:
|
||||||
Mutex _defragQueue_m;
|
Mutex _defragQueue_m;
|
||||||
|
|
||||||
// ZeroTier-layer RX queue of incoming packets in the process of being decoded
|
// ZeroTier-layer RX queue of incoming packets in the process of being decoded
|
||||||
std::vector< SharedPtr<IncomingPacket> > _rxQueue;
|
std::list< SharedPtr<IncomingPacket> > _rxQueue;
|
||||||
Mutex _rxQueue_m;
|
Mutex _rxQueue_m;
|
||||||
|
|
||||||
// ZeroTier-layer TX queue by destination ZeroTier address
|
// ZeroTier-layer TX queue by destination ZeroTier address
|
||||||
|
|
Loading…
Add table
Reference in a new issue