wgengine/magicsock: don't Rebind after STUN error if closed.

https://github.com/tailscale/tailscale/pull/3014 added a
rebind on STUN failure, which means there can now be a
tailscale.com/wgengine/magicsock.(*RebindingUDPConn).ReadFromNetaddr
in progress at the end of the test waiting for a STUN
response which will never arrive.

This causes a test flake due to the resource leak in those
cases where the Conn decided to rebind. For whatever reason,
it mostly flakes with Windows.

If the Conn is closed, don't Rebind after a send error.

Signed-off-by: Denton Gentry <dgentry@tailscale.com>
pull/3116/head
Denton Gentry 3 years ago committed by Denton Gentry
parent f55c2bccf5
commit def650b3e8

@ -616,8 +616,13 @@ func (c *Conn) updateEndpoints(why string) {
}() }()
c.logf("[v1] magicsock: starting endpoint update (%s)", why) c.logf("[v1] magicsock: starting endpoint update (%s)", why)
if c.noV4Send.Get() { if c.noV4Send.Get() {
c.logf("magicsock: last netcheck reported send error. Rebinding.") c.mu.Lock()
c.Rebind() closed := c.closed
c.mu.Unlock()
if !closed {
c.logf("magicsock: last netcheck reported send error. Rebinding.")
c.Rebind()
}
} }
endpoints, err := c.determineEndpoints(c.connCtx) endpoints, err := c.determineEndpoints(c.connCtx)

Loading…
Cancel
Save