Revert "ipn/ipnlocal: remove unnecessary usees of lockAndGetUnlock"

This reverts commit 2fb9472990ea76b30b7ac7c138b856ba9500dfa1.

Reason: rolling back atypical `*Locked` methods.

Updates tailscale/corp#31713

Signed-off-by: Nick Khyl <nickk@tailscale.com>
This commit is contained in:
Nick Khyl 2025-08-27 13:03:45 -05:00
parent 5c6f9b8293
commit fa0af2afdf
No known key found for this signature in database

View File

@ -797,8 +797,8 @@ func (b *LocalBackend) Dialer() *tsdial.Dialer {
// It returns (false, nil) if not running in declarative mode, (true, nil) on
// success, or (false, error) on failure.
func (b *LocalBackend) ReloadConfig() (ok bool, err error) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
if b.conf == nil {
return false, nil
}
@ -1958,8 +1958,8 @@ func (b *LocalBackend) registerSysPolicyWatch() (unregister func(), err error) {
//
// b.mu must not be held.
func (b *LocalBackend) reconcilePrefs() (_ ipn.PrefsView, anyChange bool) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
prefs := b.pm.CurrentPrefs().AsStruct()
if !b.reconcilePrefsLocked(prefs) {
return prefs.View(), false
@ -2327,8 +2327,8 @@ func (b *LocalBackend) Start(opts ipn.Options) error {
clientToShutdown.Shutdown()
}
}()
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
if opts.UpdatePrefs != nil {
if err := b.checkPrefsLocked(opts.UpdatePrefs); err != nil {
@ -3534,8 +3534,8 @@ func (b *LocalBackend) onClientVersion(v *tailcfg.ClientVersion) {
}
func (b *LocalBackend) onTailnetDefaultAutoUpdate(au bool) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
prefs := b.pm.CurrentPrefs()
if !prefs.Valid() {
@ -4001,8 +4001,8 @@ func (b *LocalBackend) shouldUploadServices() bool {
//
// On non-multi-user systems, the actor should be set to nil.
func (b *LocalBackend) SetCurrentUser(actor ipnauth.Actor) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
var userIdentifier string
if user := cmp.Or(actor, b.currentUser); user != nil {
@ -4034,8 +4034,8 @@ func (b *LocalBackend) SetCurrentUser(actor ipnauth.Actor) {
// or disconnecting, or a change in the desktop session state, and is used
// for logging.
func (b *LocalBackend) SwitchToBestProfile(reason string) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
b.switchToBestProfileLocked(reason)
}
@ -4308,8 +4308,8 @@ func (b *LocalBackend) checkAutoUpdatePrefsLocked(p *ipn.Prefs) error {
// Setting the value to false when use of an exit node is already false is not an error,
// nor is true when the exit node is already in use.
func (b *LocalBackend) SetUseExitNodeEnabled(actor ipnauth.Actor, v bool) (ipn.PrefsView, error) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
p0 := b.pm.CurrentPrefs()
if v && p0.ExitNodeID() != "" {
@ -4379,8 +4379,8 @@ func (b *LocalBackend) EditPrefsAs(mp *ipn.MaskedPrefs, actor ipnauth.Actor) (ip
return ipn.PrefsView{}, errors.New("can't set Internal fields")
}
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
return b.editPrefsLocked(actor, mp)
}
@ -4569,8 +4569,8 @@ func (b *LocalBackend) startReconnectTimerLocked(d time.Duration) {
profileID := b.pm.CurrentProfile().ID()
var reconnectTimer tstime.TimerController
reconnectTimer = b.clock.AfterFunc(d, func() {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
if b.reconnectTimer != reconnectTimer {
// We're either not the most recent timer, or we lost the race when
@ -4617,7 +4617,7 @@ func (b *LocalBackend) stopReconnectTimerLocked() {
}
}
// The caller must hold b.mu.
// Warning: b.mu must be held on entry.
func (b *LocalBackend) editPrefsLocked(actor ipnauth.Actor, mp *ipn.MaskedPrefs) (ipn.PrefsView, error) {
p0 := b.pm.CurrentPrefs()
@ -5664,8 +5664,8 @@ func (b *LocalBackend) applyPrefsToHostinfoLocked(hi *tailcfg.Hostinfo, prefs ip
// really this is more "one of several places in which random things
// happen".
func (b *LocalBackend) enterState(newState ipn.State) {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
b.enterStateLocked(newState)
}
@ -5868,8 +5868,8 @@ func (b *LocalBackend) nextStateLocked() ipn.State {
// TODO(apenwarr): use a channel or something to prevent reentrancy?
// Or maybe just call the state machine from fewer places.
func (b *LocalBackend) stateMachine() {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
b.stateMachineLocked()
}
@ -6063,8 +6063,8 @@ func (b *LocalBackend) Logout(ctx context.Context, actor ipnauth.Actor) error {
var profile ipn.LoginProfileView
if err := func() error {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
if !b.hasNodeKeyLocked() {
// Already logged out.
@ -6106,8 +6106,8 @@ func (b *LocalBackend) Logout(ctx context.Context, actor ipnauth.Actor) error {
return err
}
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
if err := b.pm.DeleteProfile(profile.ID()); err != nil {
b.logf("error deleting profile: %v", err)
@ -7289,8 +7289,8 @@ func (b *LocalBackend) ShouldInterceptVIPServiceTCPPort(ap netip.AddrPort) bool
// It will restart the backend on success.
// If the profile is not known, it returns an errProfileNotFound.
func (b *LocalBackend) SwitchProfile(profile ipn.ProfileID) error {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
oldControlURL := b.pm.CurrentPrefs().ControlURLOrDefault()
if _, changed, err := b.pm.SwitchToProfileByID(profile); !changed || err != nil {
@ -7384,7 +7384,7 @@ func (b *LocalBackend) getHardwareAddrs() ([]string, error) {
// resetForProfileChangeLocked resets the backend for a profile change.
//
// The caller must hold b.mu.
// b.mu must held on entry. It is released on exit.
func (b *LocalBackend) resetForProfileChangeLocked() error {
if b.shutdownCalled {
// Prevent a call back to Start during Shutdown, which calls Logout for
@ -7434,8 +7434,8 @@ func (b *LocalBackend) resetForProfileChangeLocked() error {
// DeleteProfile deletes a profile with the given ID.
// If the profile is not known, it is a no-op.
func (b *LocalBackend) DeleteProfile(p ipn.ProfileID) error {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
needToRestart := b.pm.CurrentProfile().ID() == p
if err := b.pm.DeleteProfile(p); err != nil {
@ -7460,8 +7460,8 @@ func (b *LocalBackend) CurrentProfile() ipn.LoginProfileView {
// NewProfile creates and switches to the new profile.
func (b *LocalBackend) NewProfile() error {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
b.pm.SwitchToNewProfile()
@ -7484,8 +7484,8 @@ func (b *LocalBackend) ListProfiles() []ipn.LoginProfileView {
// backend is left with a new profile, ready for StartLoginInterative to be
// called to register it as new node.
func (b *LocalBackend) ResetAuth() error {
b.mu.Lock()
defer b.mu.Unlock()
unlock := b.lockAndGetUnlock()
defer unlock()
prevCC := b.resetControlClientLocked()
if prevCC != nil {