mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 13:05:46 +00:00
ipn/ipnlocal: close peer API listeners on transition away from Running
Updates tailscale/corp#1621 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
d94ed7310b
commit
ad1a595a75
@ -1725,6 +1725,20 @@ func (b *LocalBackend) fileRootLocked(uid tailcfg.UserID) string {
|
|||||||
return dir
|
return dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// closePeerAPIListenersLocked closes any existing peer API listeners
|
||||||
|
// and clears out the peer API server state.
|
||||||
|
//
|
||||||
|
// It does not kick off any Hostinfo update with new services.
|
||||||
|
//
|
||||||
|
// b.mu must be held.
|
||||||
|
func (b *LocalBackend) closePeerAPIListenersLocked() {
|
||||||
|
b.peerAPIServer = nil
|
||||||
|
for _, pln := range b.peerAPIListeners {
|
||||||
|
pln.Close()
|
||||||
|
}
|
||||||
|
b.peerAPIListeners = nil
|
||||||
|
}
|
||||||
|
|
||||||
func (b *LocalBackend) initPeerAPIListener() {
|
func (b *LocalBackend) initPeerAPIListener() {
|
||||||
b.mu.Lock()
|
b.mu.Lock()
|
||||||
defer b.mu.Unlock()
|
defer b.mu.Unlock()
|
||||||
@ -1743,11 +1757,7 @@ func (b *LocalBackend) initPeerAPIListener() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b.peerAPIServer = nil
|
b.closePeerAPIListenersLocked()
|
||||||
for _, pln := range b.peerAPIListeners {
|
|
||||||
pln.Close()
|
|
||||||
}
|
|
||||||
b.peerAPIListeners = nil
|
|
||||||
|
|
||||||
selfNode := b.netMap.SelfNode
|
selfNode := b.netMap.SelfNode
|
||||||
if len(b.netMap.Addresses) == 0 || selfNode == nil {
|
if len(b.netMap.Addresses) == 0 || selfNode == nil {
|
||||||
@ -1966,7 +1976,7 @@ func applyPrefsToHostinfo(hi *tailcfg.Hostinfo, prefs *ipn.Prefs) {
|
|||||||
// happen".
|
// happen".
|
||||||
func (b *LocalBackend) enterState(newState ipn.State) {
|
func (b *LocalBackend) enterState(newState ipn.State) {
|
||||||
b.mu.Lock()
|
b.mu.Lock()
|
||||||
state := b.state
|
oldState := b.state
|
||||||
b.state = newState
|
b.state = newState
|
||||||
prefs := b.prefs
|
prefs := b.prefs
|
||||||
cc := b.cc
|
cc := b.cc
|
||||||
@ -1976,14 +1986,17 @@ func (b *LocalBackend) enterState(newState ipn.State) {
|
|||||||
if newState == ipn.Running {
|
if newState == ipn.Running {
|
||||||
b.authURL = ""
|
b.authURL = ""
|
||||||
b.authURLSticky = ""
|
b.authURLSticky = ""
|
||||||
|
} else if oldState == ipn.Running {
|
||||||
|
// Transitioning away from running.
|
||||||
|
b.closePeerAPIListenersLocked()
|
||||||
}
|
}
|
||||||
b.mu.Unlock()
|
b.mu.Unlock()
|
||||||
|
|
||||||
if state == newState {
|
if oldState == newState {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
b.logf("Switching ipn state %v -> %v (WantRunning=%v)",
|
b.logf("Switching ipn state %v -> %v (WantRunning=%v)",
|
||||||
state, newState, prefs.WantRunning)
|
oldState, newState, prefs.WantRunning)
|
||||||
health.SetIPNState(newState.String(), prefs.WantRunning)
|
health.SetIPNState(newState.String(), prefs.WantRunning)
|
||||||
b.send(ipn.Notify{State: &newState})
|
b.send(ipn.Notify{State: &newState})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user