From 6c7dfcafc1a6453cc8cbb7f160ad3ec0087ac88a Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Fri, 19 Jun 2015 00:24:57 +0200 Subject: [PATCH] replace _rxQueue list by vector for faster memory access and less allocations --- node/Switch.cpp | 16 ++++++++++------ node/Switch.hpp | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/node/Switch.cpp b/node/Switch.cpp index 0aa0b664b..014885e0c 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -410,10 +410,12 @@ void Switch::doAnythingWaitingForPeer(const SharedPtr &peer) { // finish processing any packets waiting on peer's public key / identity Mutex::Lock _l(_rxQueue_m); - for(std::list< SharedPtr >::iterator rxi(_rxQueue.begin());rxi!=_rxQueue.end();) { - if ((*rxi)->tryDecode(RR)) - _rxQueue.erase(rxi++); - else ++rxi; + for(std::vector< SharedPtr >::iterator rxi(_rxQueue.begin());rxi!=_rxQueue.end();) { + if ((*rxi)->tryDecode(RR)) { + // erase element (replace by last) + *rxi = _rxQueue.back(); + _rxQueue.pop_back(); + } else ++rxi; } } @@ -514,10 +516,12 @@ unsigned long Switch::doTimerTasks(uint64_t now) { // Time out RX queue packets that never got WHOIS lookups or other info. Mutex::Lock _l(_rxQueue_m); - for(std::list< SharedPtr >::iterator i(_rxQueue.begin());i!=_rxQueue.end();) { + for(std::vector< SharedPtr >::iterator i(_rxQueue.begin());i!=_rxQueue.end();) { if ((now - (*i)->receiveTime()) > ZT_RECEIVE_QUEUE_TIMEOUT) { TRACE("RX %s -> %s timed out",(*i)->source().toString().c_str(),(*i)->destination().toString().c_str()); - _rxQueue.erase(i++); + // erase element (replace by last) + *i = _rxQueue.back(); + _rxQueue.pop_back(); } else ++i; } } diff --git a/node/Switch.hpp b/node/Switch.hpp index 0ba4c138c..2820ed1f4 100644 --- a/node/Switch.hpp +++ b/node/Switch.hpp @@ -213,7 +213,7 @@ private: Mutex _defragQueue_m; // ZeroTier-layer RX queue of incoming packets in the process of being decoded - std::list< SharedPtr > _rxQueue; + std::vector< SharedPtr > _rxQueue; Mutex _rxQueue_m; // ZeroTier-layer TX queue by destination ZeroTier address