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>
(cherry picked from commit def650b3e8)
This commit is contained in:
Denton Gentry 2021-10-16 13:59:13 -07:00 committed by Brad Fitzpatrick
parent 46fffa32ed
commit 76ad9d7a7a

View File

@ -616,9 +616,14 @@ 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.mu.Lock()
closed := c.closed
c.mu.Unlock()
if !closed {
c.logf("magicsock: last netcheck reported send error. Rebinding.") c.logf("magicsock: last netcheck reported send error. Rebinding.")
c.Rebind() c.Rebind()
} }
}
endpoints, err := c.determineEndpoints(c.connCtx) endpoints, err := c.determineEndpoints(c.connCtx)
if err != nil { if err != nil {