summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-30 14:11:10 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-30 14:11:10 -0700
commitd8dbbf7484f5df16a3e36b35da31383cc9589081 (patch)
tree3271fcaa23dec111e56ef7fd3b6cd2ea3cb16cc7
parent377ccff600859da2d0e7ecd65a38953bd471d04d (diff)
downloadinfinitytier-d8dbbf7484f5df16a3e36b35da31383cc9589081.tar.gz
infinitytier-d8dbbf7484f5df16a3e36b35da31383cc9589081.zip
Add some debug code in TRACE mode to catch a bug.
-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));
+ }
}
/**