From e6a63f5547f928f4908b7436210340c9db752284 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Oct 2015 13:57:02 -0700 Subject: [PATCH] Fix bug in setWorld that might have caused a peer entry for myself (which would never be used) --- node/Topology.cpp | 20 +++++++++++--------- node/Topology.hpp | 5 +++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/node/Topology.cpp b/node/Topology.cpp index 88c8856c4..adfcd1f99 100644 --- a/node/Topology.cpp +++ b/node/Topology.cpp @@ -358,16 +358,18 @@ void Topology::_setWorld(const World &newWorld) _rootAddresses.clear(); _rootPeers.clear(); for(std::vector::const_iterator r(_world.roots().begin());r!=_world.roots().end();++r) { - if (r->identity == RR->identity) - _amRoot = true; _rootAddresses.push_back(r->identity.address()); - SharedPtr *rp = _peers.get(r->identity.address()); - if (rp) { - _rootPeers.push_back(*rp); - } else if (r->identity.address() != RR->identity.address()) { - SharedPtr newrp(new Peer(RR->identity,r->identity)); - _peers.set(r->identity.address(),newrp); - _rootPeers.push_back(newrp); + if (r->identity.address() == RR->identity.address()) { + _amRoot = true; + } else { + SharedPtr *rp = _peers.get(r->identity.address()); + if (rp) { + _rootPeers.push_back(*rp); + } else { + SharedPtr newrp(new Peer(RR->identity,r->identity)); + _peers.set(r->identity.address(),newrp); + _rootPeers.push_back(newrp); + } } } } diff --git a/node/Topology.hpp b/node/Topology.hpp index 48e264a87..324ec0004 100644 --- a/node/Topology.hpp +++ b/node/Topology.hpp @@ -225,6 +225,11 @@ public: return _peers.entries(); } + /** + * @return True if I am a root server in the current World + */ + inline bool amRoot() const throw() { return _amRoot; } + private: Identity _getIdentity(const Address &zta); void _setWorld(const World &newWorld);