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
M. J. Fromberger 6c8fef961e
ipn/ipnlocal: replace the LockedOnEntry pattern with conventional lock/unlock discipline (#16925)
There are several methods within the LocalBackend that used an unusual and
error-prone lock discipline whereby they require the caller to hold the backend
mutex on entry, but release it on the way out.

In #11650 we added some support code to make this pattern more visible.
Now it is time to eliminate the pattern (at least within this package).
This is intended to produce no semantic changes, though I am relying on
integration tests and careful inspection to achieve that.

To the extent possible I preserved the existing control flow. In a few places,
however, I replaced this with an unlock/lock closure. This means we will
sometimes reacquire a lock only to release it again one frame up the stack, but
these operations are not performance sensitive and the legibility gain seems
worthwhile.

We can probably also pull some of these out into separate methods, but I did
not do that here so as to avoid other variable scope changes that might be hard
to see. I would like to do some more cleanup separately.

As a follow-up, we could also remove the unlockOnce helper, but I did not do
that here either.

Updates #11649

Change-Id: I4c92d4536eca629cfcd6187528381c33f4d64e20
Signed-off-by: M. J. Fromberger <fromberger@tailscale.com>
4 months ago
..
testdata ipn/ipnlocal: fix the path for writing cert files (#7203) 3 years ago
autoupdate.go clientupdate: return true for CanAutoUpdate for macsys (#12746) 2 years ago
autoupdate_disabled.go ipn/ipnlocal: periodically run auto-updates when "offline" (#12118) 2 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
bus.go ipn/ipnlocal: fix build, remove another Notify.BackendLogID reference that crept in 1 year ago
bus_test.go ipn/ipnlocal: add IPN Bus NotifyRateLimit watch bit NotifyRateLimit 1 year ago
c2n.go ipn: add missing entries for OpenBSD 7 months 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: include previous cert in new ACME orders (#15595) 9 months ago
cert_js.go ipn/ipnlocal: add c2n method to check on TLS cert fetch status 2 years ago
cert_test.go ipn/ipnlocal, envknob: make it possible to configure the cert client to act in read-only mode (#15250) 10 months ago
dnsconfig_test.go ipn,net,tsnet,wgengine: make an eventbus mandatory where it is used (#16594) 5 months ago
drive.go drive,ipn/ipnlocal: calculate peer taildrive URLs on-demand 6 months ago
expiry.go all: add Node.HomeDERP int, phase out "127.3.3.40:$region" hack [capver 111] 12 months ago
expiry_test.go cmd/viewer,types/views,various: avoid allocations in pointer field getters whenever possible 12 months ago
extension_host.go ipn/ipnlocal: make GetExt work earlier, before extension init 8 months ago
extension_host_test.go ipn/ipnlocal: fix missing defer in testExtension.Shutdown 6 months ago
local.go ipn/ipnlocal: replace the LockedOnEntry pattern with conventional lock/unlock discipline (#16925) 4 months ago
local_test.go ipn/ipnlocal: replace the LockedOnEntry pattern with conventional lock/unlock discipline (#16925) 4 months ago
loglines_test.go net/netmon: publish events to event bus 9 months ago
network-lock.go ipn/ipnlocal: make pricing restriction message for Tailnet Lock clearer 7 months ago
network-lock_test.go ipn,net,tsnet,wgengine: make an eventbus mandatory where it is used (#16594) 5 months ago
node_backend.go types/dnstype, ipn/ipnlocal: allow other DNS resolvers with exit nodes 5 months ago
node_backend_test.go ipn/ipnlocal,wgengine/magicsock: use eventbus for node & filter updates (#16271) 7 months ago
peerapi.go ipn/ipnlocal: add some verbose logging to taildrive peerapi handler 7 months ago
peerapi_h2c.go all: update copyright and license headers 3 years ago
peerapi_macios_ext.go net/netmon, add: add netmon.State type alias of interfaces.State 2 years ago
peerapi_test.go ipn,net,tsnet,wgengine: make an eventbus mandatory where it is used (#16594) 5 months ago
prefs_metrics.go health, ipn/ipnlocal: add metrics for various client events (#15828) 8 months ago
profiles.go ipn/ipnlocal: replace the LockedOnEntry pattern with conventional lock/unlock discipline (#16925) 4 months ago
profiles_notwindows.go ipn/ipnlocal: refactor and cleanup profileManager 1 year ago
profiles_test.go feature,ipn/ipnlocal: add profileManager.StateChangeHook 8 months ago
profiles_windows.go ipn/ipnlocal: refactor and cleanup profileManager 1 year ago
serve.go cmd/tailscale/cli: revert key for web config for services to FQDN (#16627) 5 months ago
serve_test.go ipn/ipnlocal,wgengine{/magicsock}: replace SetNetworkMap with eventbus (#16299) 7 months ago
ssh.go all: remove non-applicable "linux" deps on Android 8 months ago
ssh_stub.go all: remove non-applicable "linux" deps on Android 8 months ago
ssh_test.go ipn/ipnlocal: plumb health.Tracker into profileManager constructor 2 years ago
state_test.go cmd/tailscale/cli,ipn/ipnlocal: restrict logout when AlwaysOn mode is enabled 6 months ago
web_client.go ipn/ipnlocal: add localNodeContext with netmap-related fields and methods 8 months ago
web_client_stub.go all: use new LocalAPI client package location 11 months ago