summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/Topology.cpp12
-rw-r--r--node/Topology.hpp11
2 files changed, 16 insertions, 7 deletions
diff --git a/node/Topology.cpp b/node/Topology.cpp
index 031c0b1b..5e086116 100644
--- a/node/Topology.cpp
+++ b/node/Topology.cpp
@@ -120,10 +120,12 @@ Topology::~Topology()
SharedPtr<Peer> Topology::addPeer(const SharedPtr<Peer> &peer)
{
- if (peer->address() == RR->identity.address()) {
- TRACE("BUG: addPeer() caught and ignored attempt to add peer for self");
- throw std::logic_error("cannot add peer for self");
+#ifdef ZT_TRACE
+ if ((!peer)||(peer->address() == RR->identity.address())) {
+ TRACE("BUG: addPeer() caught and ignored attempt to add peer for self or add a NULL peer");
+ abort();
}
+#endif
SharedPtr<Peer> np;
{
@@ -133,6 +135,7 @@ SharedPtr<Peer> Topology::addPeer(const SharedPtr<Peer> &peer)
hp = peer;
np = hp;
}
+
np->use(RR->node->now());
saveIdentity(np->identity());
@@ -321,8 +324,7 @@ unsigned long Topology::countActive() const
Address *a = (Address *)0;
SharedPtr<Peer> *p = (SharedPtr<Peer> *)0;
while (i.next(a,p)) {
- if ((*p)->hasActiveDirectPath(now))
- ++cnt;
+ cnt += (unsigned long)((*p)->hasActiveDirectPath(now));
}
return cnt;
}
diff --git a/node/Topology.hpp b/node/Topology.hpp
index d6f453ac..99933866 100644
--- a/node/Topology.hpp
+++ b/node/Topology.hpp
@@ -234,8 +234,15 @@ public:
Hashtable< Address,SharedPtr<Peer> >::Iterator i(_peers);
Address *a = (Address *)0;
SharedPtr<Peer> *p = (SharedPtr<Peer> *)0;
- while (i.next(a,p))
- f(*this,*p);
+ while (i.next(a,p)) {
+#ifdef ZT_TRACE
+ if (!(*p)) {
+ ZT_TRACE("eachPeer() caught NULL peer for %s",a->toString().c_str());
+ abort();
+ }
+#endif
+ f(*this,*((const SharedPtr<Peer> *)p));
+ }
}
/**