summaryrefslogtreecommitdiffhomepage
path: root/control/controlhttp/controlhttpserver/controlhttpserver.go
diff options
context:
space:
mode:
authorNick Khyl <nickk@tailscale.com>2025-01-14 19:36:27 -0600
committerNick Khyl <1761190+nickkhyl@users.noreply.github.com>2025-01-15 15:38:51 -0600
commitf023c8603a8b519846b567052119739774e5ac57 (patch)
treed57942f8ecc695a6b0df2c7807bb4a2e188ff8bc /control/controlhttp/controlhttpserver/controlhttpserver.go
parent1b303ee5baef3ddab40be4d1c2b8caa284fd811d (diff)
downloadtailscale-f023c8603a8b519846b567052119739774e5ac57.tar.xz
tailscale-f023c8603a8b519846b567052119739774e5ac57.zip
types/lazy: fix flaky TestDeferAfterDo
This test verifies, among other things, that init functions cannot be deferred after (*DeferredFuncs).Do has already been called and that all subsequent calls to (*DeferredFuncs).Defer return false. However, the initial implementation of this check was racy: by the time (*DeferredFuncs).Do returned, not all goroutines that successfully deferred an init function may have incremented the atomic variable tracking the number of deferred functions. As a result, the variable's value could differ immediately after (*DeferredFuncs).Do returned and after all goroutines had completed execution (i.e., after wg.Wait()). In this PR, we replace the original racy check with a different one. Although this new check is also racy, it can only produce false negatives. This means that if the test fails, it indicates an actual bug rather than a flaky test. Fixes #14039 Signed-off-by: Nick Khyl <nickk@tailscale.com>
Diffstat (limited to 'control/controlhttp/controlhttpserver/controlhttpserver.go')
0 files changed, 0 insertions, 0 deletions