From 68911f677864795751025175578953b24bc6cfd6 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 11 May 2021 11:14:53 -0700 Subject: [PATCH] wgengine/bench: ignore "engine closing" errors On benchmark completion, we shut down the wgengine. If we happen to poll for status during shutdown, we get an "engine closing" error. It doesn't hurt anything; ignore it. Fixes tailscale/corp#1776 Signed-off-by: Josh Bleecher Snyder --- wgengine/bench/wg.go | 7 +++++++ wgengine/userspace.go | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/wgengine/bench/wg.go b/wgengine/bench/wg.go index 412799e15..f4275d674 100644 --- a/wgengine/bench/wg.go +++ b/wgengine/bench/wg.go @@ -5,6 +5,7 @@ package main import ( + "errors" "io" "log" "os" @@ -89,6 +90,9 @@ func setupWGTest(b *testing.B, logf logger.Logf, traf *TrafficGen, a1, a2 netadd var e1waitDoneOnce sync.Once e1.SetStatusCallback(func(st *wgengine.Status, err error) { + if errors.Is(err, wgengine.ErrEngineClosing) { + return + } if err != nil { log.Fatalf("e1 status err: %v", err) } @@ -124,6 +128,9 @@ func setupWGTest(b *testing.B, logf logger.Logf, traf *TrafficGen, a1, a2 netadd var e2waitDoneOnce sync.Once e2.SetStatusCallback(func(st *wgengine.Status, err error) { + if errors.Is(err, wgengine.ErrEngineClosing) { + return + } if err != nil { log.Fatalf("e2 status err: %v", err) } diff --git a/wgengine/userspace.go b/wgengine/userspace.go index d90cb8533..4a7f56545 100644 --- a/wgengine/userspace.go +++ b/wgengine/userspace.go @@ -880,6 +880,8 @@ func (e *userspaceEngine) getStatusCallback() StatusCallback { var singleNewline = []byte{'\n'} +var ErrEngineClosing = errors.New("engine closing; no status") + func (e *userspaceEngine) getStatus() (*Status, error) { // Grab derpConns before acquiring wgLock to not violate lock ordering; // the DERPs method acquires magicsock.Conn.mu. @@ -893,7 +895,7 @@ func (e *userspaceEngine) getStatus() (*Status, error) { closing := e.closing e.mu.Unlock() if closing { - return nil, errors.New("engine closing; no status") + return nil, ErrEngineClosing } if e.wgdev == nil {