wgengine/magicsock: fix UDPRelayAllocReq/Resp deadlock (#17831)

Updates #17830

Signed-off-by: Jordan Whited <jordan@tailscale.com>
gesa/ssh-client-session-monitoring
Jordan Whited 1 month ago committed by GitHub
parent 18806de400
commit 2ad2d4d409
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -2444,7 +2444,10 @@ func (c *Conn) handleDiscoMessage(msg []byte, src epAddr, shouldBeRelayHandshake
if !nodeHasCap(c.filt, c.peers.At(peerI), c.self, tailcfg.PeerCapabilityRelay) {
return
}
c.allocRelayEndpointPub.Publish(UDPRelayAllocReq{
// [Conn.mu] must not be held while publishing, or [Conn.onUDPRelayAllocResp]
// can deadlock as the req sub and resp pub are the same goroutine.
// See #17830.
go c.allocRelayEndpointPub.Publish(UDPRelayAllocReq{
RxFromDiscoKey: sender,
RxFromNodeKey: nodeKey,
Message: req,

Loading…
Cancel
Save