From 94f4316a0ecb56f7e34422a7dfed73efb2bbe1a3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 9 Nov 2015 14:54:05 -0800 Subject: Fix for possible high CPU usage on multicast queries. --- node/Node.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) (limited to 'node/Node.cpp') diff --git a/node/Node.cpp b/node/Node.cpp index 6ba038eb..31757b45 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -116,7 +116,9 @@ Node::Node( RR->antiRec = new AntiRecursion(); RR->topology = new Topology(RR); RR->sa = new SelfAwareness(RR); + RR->dp = new DeferredPackets(RR); } catch ( ... ) { + delete RR->dp; delete RR->sa; delete RR->topology; delete RR->antiRec; @@ -131,14 +133,11 @@ Node::Node( Node::~Node() { Mutex::Lock _l(_networks_m); - Mutex::Lock _l2(RR->dpSetLock); _networks.clear(); // ensure that networks are destroyed before shutdow - DeferredPackets *dp = RR->dp; - RR->dp = (DeferredPackets *)0; - delete dp; - + RR->dpEnabled = 0; + delete RR->dp; delete RR->sa; delete RR->topology; delete RR->antiRec; @@ -647,23 +646,14 @@ void Node::clusterStatus(ZT_ClusterStatus *cs) void Node::backgroundThreadMain() { - RR->dpSetLock.lock(); - if (!RR->dp) { - try { - RR->dp = new DeferredPackets(RR); - } catch ( ... ) { // sanity check -- could only really happen if out of memory - RR->dpSetLock.unlock(); - return; - } - } - RR->dpSetLock.unlock(); - + ++RR->dpEnabled; for(;;) { try { if (RR->dp->process() < 0) break; } catch ( ... ) {} // sanity check -- should not throw } + --RR->dpEnabled; } /****************************************************************************/ -- cgit v1.2.3