wgengine/magicsock: close test loggers once we're done with them

This is a big hammer approach to helping with #1132.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
Josh Bleecher Snyder
2021-01-14 17:39:36 -08:00
committed by Josh Bleecher Snyder
parent 08baa17d9a
commit 2d837f79dc
2 changed files with 38 additions and 8 deletions

View File

@@ -192,3 +192,27 @@ func Filtered(logf Logf, allow func(s string) bool) Logf {
logf(format, args...)
}
}
// LogfCloser wraps logf to create a logger that can be closed.
// Calling close makes all future calls to newLogf into no-ops.
func LogfCloser(logf Logf) (newLogf Logf, close func()) {
var (
mu sync.Mutex
closed bool
)
close = func() {
mu.Lock()
defer mu.Unlock()
closed = true
}
newLogf = func(msg string, args ...interface{}) {
mu.Lock()
if closed {
mu.Unlock()
return
}
mu.Unlock()
logf(msg, args...)
}
return newLogf, close
}