소스 검색

Try rehandshaking a main hostinfo after releasing hostmap locks (#863)

Nate Brown 2 년 전
부모
커밋
d1f786419c
1개의 변경된 파일11개의 추가작업 그리고 6개의 파일을 삭제
  1. 11 6
      connection_manager.go

+ 11 - 6
connection_manager.go

@@ -17,11 +17,12 @@ import (
 type trafficDecision int
 
 const (
-	doNothing     trafficDecision = 0
-	deleteTunnel  trafficDecision = 1 // delete the hostinfo on our side, do not notify the remote
-	closeTunnel   trafficDecision = 2 // delete the hostinfo and notify the remote
-	swapPrimary   trafficDecision = 3
-	migrateRelays trafficDecision = 4
+	doNothing      trafficDecision = 0
+	deleteTunnel   trafficDecision = 1 // delete the hostinfo on our side, do not notify the remote
+	closeTunnel    trafficDecision = 2 // delete the hostinfo and notify the remote
+	swapPrimary    trafficDecision = 3
+	migrateRelays  trafficDecision = 4
+	tryRehandshake trafficDecision = 5
 )
 
 type connectionManager struct {
@@ -193,6 +194,9 @@ func (n *connectionManager) doTrafficCheck(localIndex uint32, p, nb, out []byte,
 
 	case migrateRelays:
 		n.migrateRelayUsed(hostinfo, primary)
+
+	case tryRehandshake:
+		n.tryRehandshake(hostinfo)
 	}
 
 	n.resetRelayTrafficCheck(hostinfo)
@@ -321,7 +325,8 @@ func (n *connectionManager) makeTrafficDecision(localIndex uint32, p, nb, out []
 		delete(n.pendingDeletion, hostinfo.localIndexId)
 
 		if mainHostInfo {
-			n.tryRehandshake(hostinfo)
+			decision = tryRehandshake
+
 		} else {
 			if n.shouldSwapPrimary(hostinfo, primary) {
 				decision = swapPrimary