coder/scaletest/loadtestutil/syncwriter.go

38 lines
592 B
Go

package loadtestutil
import (
"io"
"sync"
)
// SyncWriter wraps an io.Writer in a sync.Mutex.
type SyncWriter struct {
mut *sync.Mutex
w io.Writer
closed bool
}
func NewSyncWriter(w io.Writer) *SyncWriter {
return &SyncWriter{
mut: &sync.Mutex{},
w: w,
}
}
// Write implements io.Writer.
func (sw *SyncWriter) Write(p []byte) (n int, err error) {
sw.mut.Lock()
defer sw.mut.Unlock()
if sw.closed {
return -1, io.ErrClosedPipe
}
return sw.w.Write(p)
}
func (sw *SyncWriter) Close() error {
sw.mut.Lock()
defer sw.mut.Unlock()
sw.closed = true
return nil
}