Fix for possible high CPU usage on multicast queries.
This commit is contained in:
parent
35c4e28f31
commit
94f4316a0e
4 changed files with 20 additions and 29 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue