From cc409ae1698335576ae0e7adc4bdba12623c9f96 Mon Sep 17 00:00:00 2001 From: snyh Date: Fri, 4 Jun 2021 16:19:30 +0800 Subject: [PATCH 1/2] perf/basic_host: Don't handle address change if we hasn't anyone --- p2p/host/basic/basic_host.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/p2p/host/basic/basic_host.go b/p2p/host/basic/basic_host.go index d0c23af9aa..54470a86df 100644 --- a/p2p/host/basic/basic_host.go +++ b/p2p/host/basic/basic_host.go @@ -520,8 +520,11 @@ func (h *BasicHost) background() { defer ticker.Stop() for { - h.updateLocalIpAddr() - curr := h.Addrs() + var curr []ma.Multiaddr + if len(h.network.ListenAddresses()) > 0 { + h.updateLocalIpAddr() + curr = h.Addrs() + } emitAddrChange(curr, lastAddrs) lastAddrs = curr From 219a23aa99209c696d37b2c1337f898f377c5d2c Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 29 Jun 2021 20:46:32 -0700 Subject: [PATCH 2/2] fix(basic_host): process address filters even when not listening That way, `Addrs` and the addresses emitted on the event bus are always consistent. --- p2p/host/basic/basic_host.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/p2p/host/basic/basic_host.go b/p2p/host/basic/basic_host.go index 54470a86df..90ae12db0a 100644 --- a/p2p/host/basic/basic_host.go +++ b/p2p/host/basic/basic_host.go @@ -520,11 +520,12 @@ func (h *BasicHost) background() { defer ticker.Stop() for { - var curr []ma.Multiaddr if len(h.network.ListenAddresses()) > 0 { h.updateLocalIpAddr() - curr = h.Addrs() } + // Request addresses anyways because, technically, address filters still apply. + // The underlying AllAddrs call is effectivley a no-op. + curr := h.Addrs() emitAddrChange(curr, lastAddrs) lastAddrs = curr @@ -816,6 +817,11 @@ func dedupAddrs(addrs []ma.Multiaddr) (uniqueAddrs []ma.Multiaddr) { // AllAddrs returns all the addresses of BasicHost at this moment in time. // It's ok to not include addresses if they're not available to be used now. func (h *BasicHost) AllAddrs() []ma.Multiaddr { + listenAddrs := h.Network().ListenAddresses() + if len(listenAddrs) == 0 { + return nil + } + h.addrMu.RLock() filteredIfaceAddrs := h.filteredInterfaceAddrs allIfaceAddrs := h.allInterfaceAddrs @@ -824,7 +830,6 @@ func (h *BasicHost) AllAddrs() []ma.Multiaddr { // Iterate over all _unresolved_ listen addresses, resolving our primary // interface only to avoid advertising too many addresses. - listenAddrs := h.Network().ListenAddresses() var finalAddrs []ma.Multiaddr if resolved, err := addrutil.ResolveUnspecifiedAddresses(listenAddrs, filteredIfaceAddrs); err != nil { // This can happen if we're listening on no addrs, or listening