diff options
| author | Josh Bleecher Snyder <josh@tailscale.com> | 2021-05-07 12:55:47 -0700 |
|---|---|---|
| committer | Josh Bleecher Snyder <josharian@gmail.com> | 2021-05-10 09:45:35 -0700 |
| commit | a72fb7ac0bd3d6be68fc019ead356941660333a6 (patch) | |
| tree | e4dc400f551215b9c434634f6e7ca7e23c530bf6 | |
| parent | 6618e82ba2e45150267aa861b30a15f1df48014d (diff) | |
| download | tailscale-a72fb7ac0bd3d6be68fc019ead356941660333a6.tar.xz tailscale-a72fb7ac0bd3d6be68fc019ead356941660333a6.zip | |
wgengine/bench: handle multiple Engine status callbacks
It is possible to get multiple status callbacks from an Engine.
We need to wait for at least one from each Engine.
Without limiting to one per Engine,
wait.Wait can exit early or can panic due to a negative counter.
Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
| -rw-r--r-- | wgengine/bench/wg.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/wgengine/bench/wg.go b/wgengine/bench/wg.go index e3cb300f4..412799e15 100644 --- a/wgengine/bench/wg.go +++ b/wgengine/bench/wg.go @@ -87,6 +87,7 @@ func setupWGTest(b *testing.B, logf logger.Logf, traf *TrafficGen, a1, a2 netadd var wait sync.WaitGroup wait.Add(2) + var e1waitDoneOnce sync.Once e1.SetStatusCallback(func(st *wgengine.Status, err error) { if err != nil { log.Fatalf("e1 status err: %v", err) @@ -118,9 +119,10 @@ func setupWGTest(b *testing.B, logf logger.Logf, traf *TrafficGen, a1, a2 netadd } c2.Peers = []wgcfg.Peer{p} e2.Reconfig(&c2, &router.Config{}, new(dns.Config)) - wait.Done() + e1waitDoneOnce.Do(wait.Done) }) + var e2waitDoneOnce sync.Once e2.SetStatusCallback(func(st *wgengine.Status, err error) { if err != nil { log.Fatalf("e2 status err: %v", err) @@ -152,7 +154,7 @@ func setupWGTest(b *testing.B, logf logger.Logf, traf *TrafficGen, a1, a2 netadd } c1.Peers = []wgcfg.Peer{p} e1.Reconfig(&c1, &router.Config{}, new(dns.Config)) - wait.Done() + e2waitDoneOnce.Do(wait.Done) }) // Not using DERP in this test (for now?). |
