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

View File

@@ -1121,18 +1121,22 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap
return nil
}
if c.streamingMapSession != nil {
if isStreaming && c.streamingMapSession != nil {
panic("mapSession is already set")
}
sess := newMapSession(persist.PrivateNodeKey(), nu, c.controlKnobs)
c.streamingMapSession = sess
defer func() {
sess.Close()
c.mu.Lock()
c.streamingMapSession = nil
c.mu.Unlock()
}()
if isStreaming {
c.streamingMapSession = sess
defer func() {
sess.Close()
c.mu.Lock()
c.streamingMapSession = nil
c.mu.Unlock()
}()
} else {
defer sess.Close()
}
sess.cancel = cancel
sess.logf = c.logf
sess.vlogf = vlogf