ipn: fix Windows crash from improperly strict assertion
@@ -1251,11 +1251,21 @@ func (b *LocalBackend) requestEngineStatusAndWait() {
// rebooting will fix it.
func (b *LocalBackend) Logout() {
b.mu.Lock()
- b.assertClientLocked()
c := b.c
b.netMap = nil
b.mu.Unlock()
+ if c == nil {
+ // Double Logout can happen via repeated IPN
+ // connections to ipnserver making it repeatedly
+ // transition from 1->0 total connections, which on
+ // Windows by default ("client mode") causes a Logout
+ // on the transition to zero.
+ // Previously this crashed when we asserted that c was non-nil
+ // here.
+ return
+ }
+
c.Logout()
b.mu.Lock()
