summaryrefslogtreecommitdiff
path: root/node/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Node.cpp')
-rw-r--r--node/Node.cpp22
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;
}
/****************************************************************************/