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 <josh@tailscale.com>
This commit is contained in:
Josh Bleecher Snyder 2021-05-11 11:14:53 -07:00 committed by Josh Bleecher Snyder
parent d707e2f7e5
commit 68911f6778
2 changed files with 10 additions and 1 deletions

View File

@ -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)
}

View File

@ -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 {