From 380ee76d00bc97eabc3abb60203fe147a32ae5b0 Mon Sep 17 00:00:00 2001 From: Dmytro Shynkevych Date: Thu, 16 Jul 2020 10:44:57 -0400 Subject: [PATCH] wgengine/magicsock: make time.Sleep in runDerpReader respect cancellation. Before this patch, the 250ms sleep would not be interrupted by context cancellation, which would result in the goroutine sometimes lingering in tests (100ms grace period). Signed-off-by: Dmytro Shynkevych --- wgengine/magicsock/magicsock.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wgengine/magicsock/magicsock.go b/wgengine/magicsock/magicsock.go index 8132e7f1b..8bc5147e2 100644 --- a/wgengine/magicsock/magicsock.go +++ b/wgengine/magicsock/magicsock.go @@ -1134,7 +1134,12 @@ func (c *Conn) runDerpReader(ctx context.Context, derpFakeAddr netaddr.IPPort, d } c.ReSTUN("derp-close") c.logf("magicsock: [%p] derp.Recv(derp-%d): %v", dc, regionID, err) - time.Sleep(250 * time.Millisecond) + select { + case <-ctx.Done(): + return + // Avoid excessive spinning. + case <-time.Sleep(250 * time.Millisecond): + } continue } switch m := msg.(type) {