mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-23 00:56:20 +00:00
wgengine/userspace: run link change subscribers in eventqueue (#18024)
Updates #17996 Signed-off-by: Claus Lensbøl <claus@tailscale.com>
This commit is contained in:
@@ -51,6 +51,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"
|
||||||
@@ -98,6 +99,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{}
|
||||||
@@ -544,7 +547,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.")
|
||||||
@@ -1288,6 +1291,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()
|
||||||
|
|||||||
Reference in New Issue
Block a user