From dc057ff8fa779a75a687e772ac23406196eaec9f Mon Sep 17 00:00:00 2001 From: Irbe Krumina Date: Fri, 14 Jul 2023 16:27:22 -0700 Subject: [PATCH] controlclient: make logout a no-op if already logged out To prevent subsequent cli logouts from erroring in a loop Updates #3833 Signed-off-by: Irbe Krumina --- control/controlclient/auto.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/control/controlclient/auto.go b/control/controlclient/auto.go index a27e9e2fa..8e3ee43e2 100644 --- a/control/controlclient/auto.go +++ b/control/controlclient/auto.go @@ -694,9 +694,18 @@ func (c *Auto) StartLogout() { func (c *Auto) Logout(ctx context.Context) error { c.logf("client.Logout()") + c.mu.Lock() + // This happens if a user logs out when tailscale client is already logged + // out either because the user logged out previously or hasn't yet logged + // in. + if !c.loggedIn { + c.logf("client.Logout(): no action taken, client is already logged out.") + c.mu.Unlock() + return nil + } + errc := make(chan error, 1) - c.mu.Lock() c.loginGoal = &LoginGoal{ wantLoggedIn: false, loggedOutResult: errc,