diff options
| author | Brad Fitzpatrick <bradfitz@tailscale.com> | 2022-09-18 07:56:40 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <brad@danga.com> | 2022-09-18 08:07:57 -0700 |
| commit | 832031d54bedecb067200a3ccb85e4601101fd03 (patch) | |
| tree | 2daf694b00c4bf3961289fd0e8f94e1a9c808cd8 | |
| parent | 42f1d92ae020cf44f10be1a51b0059b46a21478b (diff) | |
| download | tailscale-832031d54bedecb067200a3ccb85e4601101fd03.tar.xz tailscale-832031d54bedecb067200a3ccb85e4601101fd03.zip | |
wgengine/magicsock: fix recently introduced data race
From 5c42990c2fc019, not yet released in a stable build.
Caught by existing tests.
Fixes #5685
Change-Id: Ia76bb328809d9644e8b96910767facf627830600
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
| -rw-r--r-- | wgengine/magicsock/magicsock.go | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/wgengine/magicsock/magicsock.go b/wgengine/magicsock/magicsock.go index 4bf8dae1f..74e279128 100644 --- a/wgengine/magicsock/magicsock.go +++ b/wgengine/magicsock/magicsock.go @@ -2366,8 +2366,7 @@ func (c *Conn) SetNetworkMap(nm *netmap.NetworkMap) { for _, n := range nm.Peers { if ep, ok := c.peerMap.endpointForNodeKey(n.Key); ok { oldDiscoKey := ep.discoKey - ep.heartbeatDisabled = heartbeatDisabled - ep.updateFromNode(n) + ep.updateFromNode(n, heartbeatDisabled) c.peerMap.upsertEndpoint(ep, oldDiscoKey) // maybe update discokey mappings in peerMap continue } @@ -2410,7 +2409,7 @@ func (c *Conn) SetNetworkMap(nm *netmap.NetworkMap) { } })) } - ep.updateFromNode(n) + ep.updateFromNode(n, heartbeatDisabled) c.peerMap.upsertEndpoint(ep, key.DiscoPublic{}) } @@ -3762,13 +3761,15 @@ func (de *endpoint) sendPingsLocked(now mono.Time, sendCallMeMaybe bool) { } } -func (de *endpoint) updateFromNode(n *tailcfg.Node) { +func (de *endpoint) updateFromNode(n *tailcfg.Node, heartbeatDisabled bool) { if n == nil { panic("nil node when updating disco ep") } de.mu.Lock() defer de.mu.Unlock() + de.heartbeatDisabled = heartbeatDisabled + if de.discoKey != n.DiscoKey { de.c.logf("[v1] magicsock: disco: node %s changed from discokey %s to %s", de.publicKey.ShortString(), de.discoKey, n.DiscoKey) de.discoKey = n.DiscoKey |
