wgengine/userspace: run link change subscribers in eventqueue (#18024)

Updates #17996

Signed-off-by: Claus Lensbøl <claus@tailscale.com>
(cherry picked from commit e7f5ca1d5e)
release-branch/1.90
Claus Lensbøl 2 weeks ago committed by Nick Khyl
parent f58cbffda1
commit d7cf0cfdb4

@ -50,6 +50,7 @@ import (
"tailscale.com/util/checkchange" "tailscale.com/util/checkchange"
"tailscale.com/util/clientmetric" "tailscale.com/util/clientmetric"
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/execqueue"
"tailscale.com/util/mak" "tailscale.com/util/mak"
"tailscale.com/util/set" "tailscale.com/util/set"
"tailscale.com/util/testenv" "tailscale.com/util/testenv"
@ -97,6 +98,8 @@ type userspaceEngine struct {
eventBus *eventbus.Bus eventBus *eventbus.Bus
eventClient *eventbus.Client eventClient *eventbus.Client
linkChangeQueue execqueue.ExecQueue
logf logger.Logf logf logger.Logf
wgLogger *wglog.Logger // a wireguard-go logging wrapper wgLogger *wglog.Logger // a wireguard-go logging wrapper
reqCh chan struct{} reqCh chan struct{}
@ -543,7 +546,7 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error)
if f, ok := feature.HookProxyInvalidateCache.GetOk(); ok { if f, ok := feature.HookProxyInvalidateCache.GetOk(); ok {
f() f()
} }
e.linkChange(&cd) e.linkChangeQueue.Add(func() { e.linkChange(&cd) })
}) })
e.eventClient = ec e.eventClient = ec
e.logf("Engine created.") e.logf("Engine created.")
@ -1258,6 +1261,9 @@ func (e *userspaceEngine) RequestStatus() {
func (e *userspaceEngine) Close() { func (e *userspaceEngine) Close() {
e.eventClient.Close() e.eventClient.Close()
// TODO(cmol): Should we wait for it too?
// Same question raised in appconnector.go.
e.linkChangeQueue.Shutdown()
e.mu.Lock() e.mu.Lock()
if e.closing { if e.closing {
e.mu.Unlock() e.mu.Unlock()

Loading…
Cancel
Save