Do not close read pipe after limit

This commit is contained in:
criyle 2020-07-14 00:12:12 -07:00
parent 687b9bf6f9
commit 744db3ff88
2 changed files with 23 additions and 2 deletions

View File

@ -28,9 +28,11 @@ func NewPipe(writer io.Writer, n int64) (<-chan struct{}, *os.File, error) {
}
done := make(chan struct{})
go func() {
defer close(done)
defer r.Close()
io.CopyN(writer, r, int64(n))
close(done)
// ensure no blocking / SIGPIPE on the other end
discardRead(r)
r.Close()
}()
return done, w, nil
}

19
pkg/pipe/discard.go Normal file
View File

@ -0,0 +1,19 @@
package pipe
import (
"io"
"os"
)
var _ io.Writer = discardWriter{}
type discardWriter struct {
}
func (w discardWriter) Write(b []byte) (int, error) {
return len(b), nil
}
func discardRead(f *os.File) (int64, error) {
return io.Copy(discardWriter{}, f)
}