Fix for possible high CPU usage on multicast queries.

This commit is contained in:
Adam Ierymenko 2015-11-09 14:54:05 -08:00
parent 35c4e28f31
commit 94f4316a0e
4 changed files with 20 additions and 29 deletions

View file

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