Просмотр исходного кода

Prevent arithmetic error on interface change.

Andrej Binder 4 лет назад
Родитель
Сommit
aeec7dae36
1 измененных файлов с 4 добавлено и 4 удалено
  1. 4 4
      node/Bond.cpp

+ 4 - 4
node/Bond.cpp

@@ -488,6 +488,10 @@ int32_t Bond::generateQoSPacket(int pathIdx, int64_t now, char* qosBuffer)
 
 
 bool Bond::assignFlowToBondedPath(SharedPtr<Flow>& flow, int64_t now)
 bool Bond::assignFlowToBondedPath(SharedPtr<Flow>& flow, int64_t now)
 {
 {
+        if (! _numBondedPaths) {
+                log("unable to assign flow %x (bond has no links)\n", flow->id);
+                return false;
+        }
 	unsigned int idx = ZT_MAX_PEER_NETWORK_PATHS;
 	unsigned int idx = ZT_MAX_PEER_NETWORK_PATHS;
 	if (_policy == ZT_BOND_POLICY_BALANCE_XOR) {
 	if (_policy == ZT_BOND_POLICY_BALANCE_XOR) {
 		idx = abs((int)(flow->id % (_numBondedPaths)));
 		idx = abs((int)(flow->id % (_numBondedPaths)));
@@ -500,10 +504,6 @@ bool Bond::assignFlowToBondedPath(SharedPtr<Flow>& flow, int64_t now)
 		if (_totalBondUnderload) {
 		if (_totalBondUnderload) {
 			entropy %= _totalBondUnderload;
 			entropy %= _totalBondUnderload;
 		}
 		}
-		if (! _numBondedPaths) {
-			log("unable to assign flow %x (bond has no links)\n", flow->id);
-			return false;
-		}
 		/* Since there may be scenarios where a path is removed before we can re-estimate
 		/* Since there may be scenarios where a path is removed before we can re-estimate
 		relative qualities (and thus allocations) we need to down-modulate the entropy
 		relative qualities (and thus allocations) we need to down-modulate the entropy
 		value that we use to randomly assign among the surviving paths, otherwise we risk
 		value that we use to randomly assign among the surviving paths, otherwise we risk