浏览代码

Improve multipath startup time

Joseph Henry 3 年之前
父节点
当前提交
ff8044f0c0
共有 1 个文件被更改,包括 11 次插入1 次删除
  1. 11 1
      node/Peer.cpp

+ 11 - 1
node/Peer.cpp

@@ -445,11 +445,21 @@ void Peer::tryMemorizedPath(void *tPtr,int64_t now)
 void Peer::performMultipathStateCheck(void *tPtr, int64_t now)
 void Peer::performMultipathStateCheck(void *tPtr, int64_t now)
 {
 {
 	Mutex::Lock _l(_bond_m);
 	Mutex::Lock _l(_bond_m);
+	if (_bond) {
+		// Once enabled the Bond object persists, no need to update state
+		return;
+	}
 	/**
 	/**
 	 * Check for conditions required for multipath bonding and create a bond
 	 * Check for conditions required for multipath bonding and create a bond
 	 * if allowed.
 	 * if allowed.
 	 */
 	 */
-	_localMultipathSupported = ((RR->bc->inUse()) && (ZT_PROTO_VERSION > 9));
+	int numAlivePaths = 0;
+	for(unsigned int i=0;i<ZT_MAX_PEER_NETWORK_PATHS;++i) {
+		if (_paths[i].p && _paths[i].p->alive(now)) {
+			numAlivePaths++;
+		}
+	}
+	_localMultipathSupported = ((numAlivePaths >= 1) && (RR->bc->inUse()) && (ZT_PROTO_VERSION > 9));
 	if (_localMultipathSupported && !_bond) {
 	if (_localMultipathSupported && !_bond) {
 		if (RR->bc) {
 		if (RR->bc) {
 			_bond = RR->bc->createTransportTriggeredBond(RR, this);
 			_bond = RR->bc->createTransportTriggeredBond(RR, this);