prober: fix data race when altering derpmap (#8397)

Move the clearing of STUNOnly flag to the updateMap() function.

Fixes #8395

Signed-off-by: Val <valerie@tailscale.com>
This commit is contained in:
valscale 2023-06-21 10:16:31 -07:00 committed by GitHub
parent dc5bc32d8f
commit f314fa4a4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -188,6 +188,9 @@ func (d *derpProber) updateMap(ctx context.Context) error {
if existing, ok := d.nodes[n.HostName]; ok { if existing, ok := d.nodes[n.HostName]; ok {
return fmt.Errorf("derpmap has duplicate nodes: %+v and %+v", existing, n) return fmt.Errorf("derpmap has duplicate nodes: %+v and %+v", existing, n)
} }
// Allow the prober to monitor nodes marked as
// STUN only in the default map
n.STUNOnly = false
d.nodes[n.HostName] = n d.nodes[n.HostName] = n
} }
} }
@ -348,8 +351,6 @@ func newConn(ctx context.Context, dm *tailcfg.DERPMap, n *tailcfg.DERPNode) (*de
priv := key.NewNode() priv := key.NewNode()
dc := derphttp.NewRegionClient(priv, l, nil /* no netMon */, func() *tailcfg.DERPRegion { dc := derphttp.NewRegionClient(priv, l, nil /* no netMon */, func() *tailcfg.DERPRegion {
rid := n.RegionID rid := n.RegionID
// Allow the prober to monitor nodes marked as STUN only in the default map
n.STUNOnly = false
return &tailcfg.DERPRegion{ return &tailcfg.DERPRegion{
RegionID: rid, RegionID: rid,
RegionCode: fmt.Sprintf("%s-%s", dm.Regions[rid].RegionCode, n.Name), RegionCode: fmt.Sprintf("%s-%s", dm.Regions[rid].RegionCode, n.Name),