Skip to content

Commit 50f2d0c

Browse files
authored
fix: add a mutex around reading logs from scaletests (coder#7521)
1 parent fcde77b commit 50f2d0c

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

scaletest/harness/run.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"context"
66
"io"
7+
"sync"
78
"time"
89

910
"golang.org/x/xerrors"
@@ -65,7 +66,7 @@ type TestRun struct {
6566
id string
6667
runner Runnable
6768

68-
logs *bytes.Buffer
69+
logs *syncBuffer
6970
done chan struct{}
7071
started time.Time
7172
duration time.Duration
@@ -87,7 +88,9 @@ func (r *TestRun) FullID() string {
8788
// Run executes the Run function with a self-managed log writer, panic handler,
8889
// error recording and duration recording. The test error is returned.
8990
func (r *TestRun) Run(ctx context.Context) (err error) {
90-
r.logs = new(bytes.Buffer)
91+
r.logs = &syncBuffer{
92+
buf: new(bytes.Buffer),
93+
}
9194
r.done = make(chan struct{})
9295
defer close(r.done)
9396

@@ -132,3 +135,20 @@ func (r *TestRun) Cleanup(ctx context.Context) (err error) {
132135
//nolint:revive // we use named returns because we mutate it in a defer
133136
return
134137
}
138+
139+
type syncBuffer struct {
140+
buf *bytes.Buffer
141+
mut sync.Mutex
142+
}
143+
144+
func (sb *syncBuffer) Write(p []byte) (n int, err error) {
145+
sb.mut.Lock()
146+
defer sb.mut.Unlock()
147+
return sb.buf.Write(p)
148+
}
149+
150+
func (sb *syncBuffer) String() string {
151+
sb.mut.Lock()
152+
defer sb.mut.Unlock()
153+
return sb.buf.String()
154+
}

0 commit comments

Comments
 (0)