diff --git a/net/netcheck/netcheck.go b/net/netcheck/netcheck.go index 72df18328..3aaa831e1 100644 --- a/net/netcheck/netcheck.go +++ b/net/netcheck/netcheck.go @@ -518,17 +518,17 @@ func (rs *reportState) addNodeLatency(node *tailcfg.DERPNode, ipp netaddr.IPPort ret := rs.report ret.UDP = true - updateLatency(&ret.RegionLatency, node.RegionID, d) + updateLatency(ret.RegionLatency, node.RegionID, d) switch { case ipp.IP.Is6(): - updateLatency(&ret.RegionV6Latency, node.RegionID, d) + updateLatency(ret.RegionV6Latency, node.RegionID, d) ret.IPv6 = true ret.GlobalV6 = ipPortStr // TODO: track MappingVariesByDestIP for IPv6 // too? Would be sad if so, but who knows. case ipp.IP.Is4(): - updateLatency(&ret.RegionV4Latency, node.RegionID, d) + updateLatency(ret.RegionV4Latency, node.RegionID, d) if rs.gotEP4 == "" { rs.gotEP4 = ipPortStr ret.GlobalV4 = ipPortStr @@ -543,6 +543,14 @@ func (rs *reportState) addNodeLatency(node *tailcfg.DERPNode, ipp netaddr.IPPort } } +func newReport() *Report { + return &Report{ + RegionLatency: make(map[int]time.Duration), + RegionV4Latency: make(map[int]time.Duration), + RegionV6Latency: make(map[int]time.Duration), + } +} + // GetReport gets a report. // // It may not be called concurrently with itself. @@ -564,7 +572,7 @@ func (c *Client) GetReport(ctx context.Context, dm *tailcfg.DERPMap) (*Report, e } rs := &reportState{ c: c, - report: new(Report), + report: newReport(), inFlight: map[stun.TxID]func(netaddr.IPPort){}, hairTX: stun.NewTxID(), // random payload gotHairSTUN: make(chan *net.UDPAddr, 1), @@ -806,11 +814,7 @@ func (c *Client) addReportHistoryAndSetPreferredDERP(r *Report) { } } -func updateLatency(mp *map[int]time.Duration, regionID int, d time.Duration) { - if *mp == nil { - *mp = make(map[int]time.Duration) - } - m := *mp +func updateLatency(m map[int]time.Duration, regionID int, d time.Duration) { if prev, ok := m[regionID]; !ok || d < prev { m[regionID] = d } diff --git a/net/netcheck/netcheck_test.go b/net/netcheck/netcheck_test.go index 1a6fa5a00..fef39b240 100644 --- a/net/netcheck/netcheck_test.go +++ b/net/netcheck/netcheck_test.go @@ -96,7 +96,7 @@ func TestWorksWhenUDPBlocked(t *testing.T) { if err != nil { t.Fatal(err) } - want := new(Report) + want := newReport() if !reflect.DeepEqual(r, want) { t.Errorf("mismatch\n got: %+v\nwant: %+v\n", r, want)