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 {