diff options
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; } /****************************************************************************/ |
