From 723a9a6e9aa4254c7d740f9af6596ba8450924ac Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 6 Feb 2017 17:20:22 -0800 Subject: [PATCH] Small additional efficiency improvement. --- node/Membership.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/node/Membership.cpp b/node/Membership.cpp index 5bb23a1a6..6307b85da 100644 --- a/node/Membership.cpp +++ b/node/Membership.cpp @@ -52,8 +52,18 @@ void Membership::pushCredentials(const RuntimeEnvironment *RR,const uint64_t now } else sendCap = (const Capability *)0; } else sendCap = (const Capability *)0; + const Tag *sendTags[ZT_MAX_NETWORK_TAGS]; + unsigned int sendTagCount = 0; + for(unsigned int t=0;t= ZT_CREDENTIAL_PUSH_EVERY) || (force) ) { + _localTags[t].lastPushed = now; + _localTags[t].id = nconf.tags[t].id(); + sendTags[sendTagCount++] = &(nconf.tags[t]); + } + } + unsigned int tagPtr = 0; - while ((tagPtr < nconf.tagCount)||(sendCom)||(sendCap)) { + while ((tagPtr < sendTagCount)||(sendCom)||(sendCap)) { Packet outp(peerAddress,RR->identity.address(),Packet::VERB_NETWORK_CREDENTIALS); if (sendCom) { @@ -72,11 +82,9 @@ void Membership::pushCredentials(const RuntimeEnvironment *RR,const uint64_t now const unsigned int tagCountAt = outp.size(); outp.addSize(2); unsigned int thisPacketTagCount = 0; - while ((tagPtr < nconf.tagCount)&&((outp.size() + sizeof(Tag) + 32) < ZT_PROTO_MAX_PACKET_LENGTH)) { + while ((tagPtr < sendTagCount)&&((outp.size() + sizeof(Tag) + 32) < ZT_PROTO_MAX_PACKET_LENGTH)) { if ( (_localTags[tagPtr].id != nconf.tags[tagPtr].id()) || ((now - _localTags[tagPtr].lastPushed) >= ZT_CREDENTIAL_PUSH_EVERY) || (force) ) { - _localTags[tagPtr].lastPushed = now; - _localTags[tagPtr].id = nconf.tags[tagPtr].id(); - nconf.tags[tagPtr].serialize(outp); + sendTags[tagPtr]->serialize(outp); ++thisPacketTagCount; } ++tagPtr;