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