mirror of https://github.com/coder/coder.git
38 lines
592 B
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
|
|
}
|