You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/ipn/ipnlocal
Brad Fitzpatrick 5e7c0b025c ipn/ipnlocal: add some "lockedOnEntry" helpers + guardrails, fix bug
A number of methods in LocalBackend (with suffixed "LockedOnEntry")
require b.mu be held but unlock it on the way out. That's asymmetric
and atypical and error prone.

This adds a helper method to LocalBackend that locks the mutex and
returns a sync.OnceFunc that unlocks the mutex. Then we pass around
that unlocker func down the chain to make it explicit (and somewhat
type check the passing of ownership) but also let the caller defer
unlock it, in the case of errors/panics that happen before the callee
gets around to calling the unlock.

This revealed a latent bug in LocalBackend.DeleteProfile which double
unlocked the mutex.

Updates #11649

Change-Id: I002f77567973bd77b8906bfa4ec9a2049b89836a
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2 years ago
..
testdata ipn/ipnlocal: fix the path for writing cert files (#7203) 3 years ago
breaktcp_darwin.go cmd/tailscale: add debug commands to break connections 2 years ago
breaktcp_linux.go cmd/tailscale: add debug commands to break connections 2 years ago
c2n.go ipn/ipnlocal: add c2n /debug/pprof/allocs endpoint 2 years ago
c2n_pprof.go ipn/ipnlocal: add c2n /debug/pprof/allocs endpoint 2 years ago
c2n_test.go util/cmpx: delete now that we're using Go 1.22 2 years ago
cert.go ipn/ipnlocal: remove ancient transition mechanism for https certs 2 years ago
cert_js.go ipn/ipnlocal: add c2n method to check on TLS cert fetch status 2 years ago
cert_test.go all: use Go 1.21 slices, maps instead of x/exp/{slices,maps} 2 years ago
dnsconfig_test.go util/cmpx: delete now that we're using Go 1.22 2 years ago
drive.go drive: move normalizeShareName into pkg drive and make func public (#11638) 2 years ago
expiry.go ssh/tailssh: use control server time instead of local time 2 years ago
expiry_test.go types/netmap, all: make NetworkMap.SelfNode a tailcfg.NodeView 2 years ago
local.go ipn/ipnlocal: add some "lockedOnEntry" helpers + guardrails, fix bug 2 years ago
local_test.go drive: move normalizeShareName into pkg drive and make func public (#11638) 2 years ago
loglines_test.go tsd: add package with System type to unify subsystem init, discovery 3 years ago
network-lock.go all: remove LenIter, use Go 1.22 range-over-int instead 2 years ago
network-lock_test.go ipn/ipnlocal,cmd/tailscale: persist tailnet name in user profile 2 years ago
peerapi.go tailscale: switch tailfs to drive syntax for api and logs (#11625) 2 years ago
peerapi_h2c.go all: update copyright and license headers 3 years ago
peerapi_macios_ext.go all: update copyright and license headers 3 years ago
peerapi_test.go all: deprecate Node.Capabilities (more), remove PeerChange.Capabilities [capver 89] 2 years ago
profiles.go util/cmpx: remove code that's in the stdlib now 2 years ago
profiles_notwindows.go ipn/ipnlocal: fix profile duplication 2 years ago
profiles_test.go ipn/ipnlocal,cmd/tailscale: persist tailnet name in user profile 2 years ago
profiles_windows.go ipn/ipnlocal: better enforce system policies 2 years ago
serve.go tailscale: update tailfs functions and vars to use drive naming (#11597) 2 years ago
serve_test.go ipn/ipnlocal: q-encode (RFC 2047) Tailscale serve header values 2 years ago
ssh.go ipnlocal: log failure to get ssh host keys 2 years ago
ssh_stub.go ipnlocal: log failure to get ssh host keys 2 years ago
ssh_test.go ipn/ipnlocal: drop not required StateKey parameter 3 years ago
state_test.go ipn/ipnlocal: validate domain of PopBrowserURL on default control URL (#11394) 2 years ago
taildrop.go ipn/localapi: add support for multipart POST to file-put 2 years ago
web_client.go all: remove LenIter, use Go 1.22 range-over-int instead 2 years ago
web_client_stub.go ipn/ipnlocal: add mutex to webClient struct 2 years ago