@ -668,37 +668,35 @@ func (c *Auto) UpdateEndpoints(endpoints []tailcfg.Endpoint) {
}
}
func ( c * Auto ) Shutdown ( ) {
func ( c * Auto ) Shutdown ( ) {
c . logf ( "client.Shutdown()" )
c . mu . Lock ( )
c . mu . Lock ( )
closed := c . closed
if c . closed {
c . mu . Unlock ( )
return
}
c . logf ( "client.Shutdown ..." )
direct := c . direct
direct := c . direct
if ! closed {
c . closed = true
c . closed = true
c . observerQueue . Shutdown ( )
c . observerQueue . Shutdown ( )
c . cancelAuthCtxLocked ( )
c . cancelAuthCtxLocked ( )
c . cancelMapCtxLocked ( )
c . cancelMapCtxLocked ( )
for _ , w := range c . unpauseWaiters {
for _ , w := range c . unpauseWaiters {
w <- false
w <- false
}
c . unpauseWaiters = nil
}
}
c . unpauseWaiters = nil
c . mu . Unlock ( )
c . mu . Unlock ( )
c . logf ( "client.Shutdown" )
c . unregisterHealthWatch ( )
if ! closed {
<- c . authDone
c . unregisterHealthWatch ( )
<- c . mapDone
<- c . authDone
<- c . updateDone
<- c . mapDone
if direct != nil {
<- c . updateDone
direct . Close ( )
if direct != nil {
direct . Close ( )
}
ctx , cancel := context . WithTimeout ( context . Background ( ) , 5 * time . Second )
defer cancel ( )
c . observerQueue . Wait ( ctx )
c . logf ( "Client.Shutdown done." )
}
}
ctx , cancel := context . WithTimeout ( context . Background ( ) , 5 * time . Second )
defer cancel ( )
c . observerQueue . Wait ( ctx )
c . logf ( "Client.Shutdown done." )
}
}
// NodePublicKey returns the node public key currently in use. This is
// NodePublicKey returns the node public key currently in use. This is