From 9cb0654ce4ce1e6b4dc4bf537a51f8b5a4d62103 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Thu, 23 Jul 2020 12:04:14 -0700 Subject: [PATCH] integration: lock buffer for concurrent writes Signed-off-by: Tonis Tiigi --- util/testutil/integration/util.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/util/testutil/integration/util.go b/util/testutil/integration/util.go index 099000bd..94478bc5 100644 --- a/util/testutil/integration/util.go +++ b/util/testutil/integration/util.go @@ -4,10 +4,12 @@ import ( "bytes" "context" "fmt" + "io" "net" "os" "os/exec" "strings" + "sync" "syscall" "time" @@ -19,10 +21,10 @@ func startCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) (func() error, error if logs != nil { b := new(bytes.Buffer) logs["stdout: "+cmd.Path] = b - cmd.Stdout = b + cmd.Stdout = &lockingWriter{Writer: b} b = new(bytes.Buffer) logs["stderr: "+cmd.Path] = b - cmd.Stderr = b + cmd.Stderr = &lockingWriter{Writer: b} } fmt.Fprintf(cmd.Stderr, "> startCmd %v %+v\n", time.Now(), cmd.Args) @@ -130,3 +132,15 @@ func requireRoot() error { } return nil } + +type lockingWriter struct { + mu sync.Mutex + io.Writer +} + +func (w *lockingWriter) Write(dt []byte) (int, error) { + w.mu.Lock() + n, err := w.Writer.Write(dt) + w.mu.Unlock() + return n, err +}