mirror of https://github.com/tailscale/tailscale/
wgengine/magicsock: fix occasional deadlock on Conn.Close on c.derpStarted
The deadlock was:
* Conn.Close was called, which acquired c.mu
* Then this goroutine scheduled:
if firstDerp {
startGate = c.derpStarted
go func() {
dc.Connect(ctx)
close(c.derpStarted)
}()
}
* The getRegion hook for that derphttp.Client then ran, which also
tries to acquire c.mu.
This change makes that hook first see if we're already in a closing
state and then it can pretend that region doesn't exist.
pull/607/head
parent
bca9fe35ba
commit
37903a9056
Loading…
Reference in New Issue