control/controlclient: allow multiple non-streaming map requests (#19106)

A client with an active streaming session would break if using the same
client for a non-streaming session. Allow the client 1 streaming and n
non-streaming sessions at the same time.

Fixes #19105

Signed-off-by: Claus Lensbøl <claus@tailscale.com>
This commit is contained in:
Claus Lensbøl
2026-03-24 14:19:21 -04:00
committed by GitHub
parent 590546b17d
commit 87ec3235d9
+5 -1
View File
@@ -1121,11 +1121,12 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap
return nil return nil
} }
if c.streamingMapSession != nil { if isStreaming && c.streamingMapSession != nil {
panic("mapSession is already set") panic("mapSession is already set")
} }
sess := newMapSession(persist.PrivateNodeKey(), nu, c.controlKnobs) sess := newMapSession(persist.PrivateNodeKey(), nu, c.controlKnobs)
if isStreaming {
c.streamingMapSession = sess c.streamingMapSession = sess
defer func() { defer func() {
sess.Close() sess.Close()
@@ -1133,6 +1134,9 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap
c.streamingMapSession = nil c.streamingMapSession = nil
c.mu.Unlock() c.mu.Unlock()
}() }()
} else {
defer sess.Close()
}
sess.cancel = cancel sess.cancel = cancel
sess.logf = c.logf sess.logf = c.logf
sess.vlogf = vlogf sess.vlogf = vlogf