Преглед изворни кода

QueryServer needs to be done outside of the lock (#996)

Nate Brown пре 1 година
родитељ
комит
50d6a1e8ca
1 измењених фајлова са 2 додато и 1 уклоњено
  1. 2 1
      handshake_manager.go

+ 2 - 1
handshake_manager.go

@@ -318,13 +318,13 @@ func (hm *HandshakeManager) GetOrHandshake(vpnIp iputil.VpnIp, cacheCb func(*Hos
 // StartHandshake will ensure a handshake is currently being attempted for the provided vpn ip
 // StartHandshake will ensure a handshake is currently being attempted for the provided vpn ip
 func (hm *HandshakeManager) StartHandshake(vpnIp iputil.VpnIp, cacheCb func(*HostInfo)) *HostInfo {
 func (hm *HandshakeManager) StartHandshake(vpnIp iputil.VpnIp, cacheCb func(*HostInfo)) *HostInfo {
 	hm.Lock()
 	hm.Lock()
-	defer hm.Unlock()
 
 
 	if hostinfo, ok := hm.vpnIps[vpnIp]; ok {
 	if hostinfo, ok := hm.vpnIps[vpnIp]; ok {
 		// We are already trying to handshake with this vpn ip
 		// We are already trying to handshake with this vpn ip
 		if cacheCb != nil {
 		if cacheCb != nil {
 			cacheCb(hostinfo)
 			cacheCb(hostinfo)
 		}
 		}
+		hm.Unlock()
 		return hostinfo
 		return hostinfo
 	}
 	}
 
 
@@ -361,6 +361,7 @@ func (hm *HandshakeManager) StartHandshake(vpnIp iputil.VpnIp, cacheCb func(*Hos
 		}
 		}
 	}
 	}
 
 
+	hm.Unlock()
 	hm.lightHouse.QueryServer(vpnIp, hm.f)
 	hm.lightHouse.QueryServer(vpnIp, hm.f)
 	return hostinfo
 	return hostinfo
 }
 }