diff options
| author | Brad Fitzpatrick <bradfitz@tailscale.com> | 2025-11-26 09:26:08 -0800 |
|---|---|---|
| committer | Brad Fitzpatrick <brad@danga.com> | 2025-11-26 10:09:23 -0800 |
| commit | 8af7778ce04457a5f84a45e7cc8f58f02b7bfb4c (patch) | |
| tree | cfa670e69ca997499de5772045179147a496ad43 /util/execqueue/execqueue_test.go | |
| parent | b7658a4ad2d13da515daee2bd8dd7d50a9067708 (diff) | |
| download | tailscale-8af7778ce04457a5f84a45e7cc8f58f02b7bfb4c.tar.xz tailscale-8af7778ce04457a5f84a45e7cc8f58f02b7bfb4c.zip | |
util/execqueue: don't hold mutex in RunSync
We don't hold q.mu while running normal ExecQueue.Add funcs, so we
shouldn't in RunSync either. Otherwise code it calls can't shut down
the queue, as seen in #18502.
Updates #18052
Co-authored-by: Nick Khyl <nickk@tailscale.com>
Change-Id: Ic5e53440411eca5e9fabac7f4a68a9f6ef026de1
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'util/execqueue/execqueue_test.go')
| -rw-r--r-- | util/execqueue/execqueue_test.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/util/execqueue/execqueue_test.go b/util/execqueue/execqueue_test.go index d10b741f7..1bce69556 100644 --- a/util/execqueue/execqueue_test.go +++ b/util/execqueue/execqueue_test.go @@ -20,3 +20,12 @@ func TestExecQueue(t *testing.T) { t.Errorf("n=%d; want 1", got) } } + +// Test that RunSync doesn't hold q.mu and block Shutdown +// as we saw in tailscale/tailscale#18502 +func TestExecQueueRunSyncLocking(t *testing.T) { + q := &ExecQueue{} + q.RunSync(t.Context(), func() { + q.Shutdown() + }) +} |
