summaryrefslogtreecommitdiff
path: root/node/Network.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-14 16:38:27 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-14 16:38:27 -0700
commita8bd8fff933b4fcc21db2be936232fff1b4f95d8 (patch)
tree6c7db186a41d6cfc3da86689f13dad8b8c65af88 /node/Network.cpp
parenta94b0e6a430ba93d1ab521e575582ff0873b0817 (diff)
downloadinfinitytier-a8bd8fff933b4fcc21db2be936232fff1b4f95d8.tar.gz
infinitytier-a8bd8fff933b4fcc21db2be936232fff1b4f95d8.zip
Make several changes to eliminate potential deadlock or recursive lock conditions, and add back rescan of multicast groups on network startup.
Diffstat (limited to 'node/Network.cpp')
-rw-r--r--node/Network.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/node/Network.cpp b/node/Network.cpp
index 3949066c..e11d7d1a 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -118,12 +118,13 @@ public:
AnnounceMulticastGroupsToPeersWithActiveDirectPaths(const RuntimeEnvironment *renv,Network *nw) :
RR(renv),
_now(Utils::now()),
- _network(nw)
+ _network(nw),
+ _supernodeAddresses(renv->topology->supernodeAddresses())
{}
inline void operator()(Topology &t,const SharedPtr<Peer> &p)
{
- if ( ( (p->hasActiveDirectPath(_now)) && (_network->isAllowed(p->address())) ) || (t.isSupernode(p->address())) ) {
+ if ( ( (p->hasActiveDirectPath(_now)) && (_network->isAllowed(p->address())) ) || (std::find(_supernodeAddresses.begin(),_supernodeAddresses.end(),p->address()) != _supernodeAddresses.end()) ) {
Packet outp(p->address(),RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
std::set<MulticastGroup> mgs(_network->multicastGroups());
@@ -151,6 +152,7 @@ private:
const RuntimeEnvironment *RR;
uint64_t _now;
Network *_network;
+ std::vector<Address> _supernodeAddresses;
};
bool Network::rescanMulticastGroups()
@@ -527,6 +529,8 @@ void Network::threadMain()
t->setEnabled(_enabled);
}
}
+
+ rescanMulticastGroups();
}
void Network::_CBhandleTapData(void *arg,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data)