diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-09 14:54:05 -0800 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-09 14:54:05 -0800 |
| commit | 94f4316a0ecb56f7e34422a7dfed73efb2bbe1a3 (patch) | |
| tree | 7550f5013ca182226553c8666f26ed2f5f3c0546 /node/Node.cpp | |
| parent | 35c4e28f314881f3f6647deaaaf3e58d2ccb5417 (diff) | |
| download | infinitytier-94f4316a0ecb56f7e34422a7dfed73efb2bbe1a3.tar.gz infinitytier-94f4316a0ecb56f7e34422a7dfed73efb2bbe1a3.zip | |
Fix for possible high CPU usage on multicast queries.
Diffstat (limited to 'node/Node.cpp')
| -rw-r--r-- | node/Node.cpp | 22 |
1 files changed, 6 insertions, 16 deletions
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; } /****************************************************************************/ |
