Browse Source

Possible bug fix in Topology, have to test...

Adam Ierymenko 11 years ago
parent
commit
0ad84b8723
1 changed files with 6 additions and 9 deletions
  1. 6 9
      node/Topology.cpp

+ 6 - 9
node/Topology.cpp

@@ -142,22 +142,18 @@ SharedPtr<Peer> Topology::getBestSupernode(const Address *avoid,unsigned int avo
 	// First look for a best supernode by comparing latencies, but exclude
 	// First look for a best supernode by comparing latencies, but exclude
 	// supernodes that have not responded to direct messages in order to
 	// supernodes that have not responded to direct messages in order to
 	// try to exclude any that are dead or unreachable.
 	// try to exclude any that are dead or unreachable.
-	for(std::vector< SharedPtr<Peer> >::const_iterator sn=_supernodePeers.begin();sn!=_supernodePeers.end();) {
+	for(std::vector< SharedPtr<Peer> >::const_iterator sn(_supernodePeers.begin());sn!=_supernodePeers.end();) {
 		// Skip explicitly avoided relays
 		// Skip explicitly avoided relays
 		for(unsigned int i=0;i<avoidCount;++i) {
 		for(unsigned int i=0;i<avoidCount;++i) {
-			if (avoid[i] == (*sn)->address()) {
-				++sn;
-				continue;
-			}
+			if (avoid[i] == (*sn)->address())
+				goto keep_searching_for_supernodes;
 		}
 		}
 
 
 		// Skip possibly comatose or unreachable relays
 		// Skip possibly comatose or unreachable relays
 		uint64_t lds = (*sn)->lastDirectSend();
 		uint64_t lds = (*sn)->lastDirectSend();
 		uint64_t ldr = (*sn)->lastDirectReceive();
 		uint64_t ldr = (*sn)->lastDirectReceive();
-		if ((lds)&&(lds > ldr)&&((lds - ldr) > ZT_PEER_RELAY_CONVERSATION_LATENCY_THRESHOLD)) {
-			++sn;
-			continue;
-		}
+		if ((lds)&&(lds > ldr)&&((lds - ldr) > ZT_PEER_RELAY_CONVERSATION_LATENCY_THRESHOLD))
+			goto keep_searching_for_supernodes;
 
 
 		if ((*sn)->hasActiveDirectPath(now)) {
 		if ((*sn)->hasActiveDirectPath(now)) {
 			unsigned int l = (*sn)->latency();
 			unsigned int l = (*sn)->latency();
@@ -173,6 +169,7 @@ SharedPtr<Peer> Topology::getBestSupernode(const Address *avoid,unsigned int avo
 			}
 			}
 		}
 		}
 
 
+keep_searching_for_supernodes:
 		++sn;
 		++sn;
 	}
 	}