diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 18:17:46 +0300 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 18:17:46 +0300 |
| commit | c5dba4360acff23a89f301235401ddfe19ab99a8 (patch) | |
| tree | af968d5fe4f655930dd07bc90a77e3ae1e83068a /pkg/util/io.go | |
| parent | 77dca0e1dfd609851a4c80ebb769b21838ec7093 (diff) | |
fix: channel reader blocks until EOF or an error was received
Diffstat (limited to 'pkg/util/io.go')
| -rw-r--r-- | pkg/util/io.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/pkg/util/io.go b/pkg/util/io.go index 5c56822..8c8725b 100644 --- a/pkg/util/io.go +++ b/pkg/util/io.go @@ -5,6 +5,8 @@ import ( "io" ) +const bufferSize = 512 + type ChannelReader struct { Out <-chan []byte Err <-chan error @@ -17,6 +19,7 @@ func NewChannelReader(ctx context.Context, reader io.Reader) ChannelReader { go func(in chan<- []byte, inErr chan<- error) { defer close(in) defer close(inErr) + data := make([]byte, bufferSize) outer: for { select { @@ -24,12 +27,12 @@ func NewChannelReader(ctx context.Context, reader io.Reader) ChannelReader { inErr <- ctx.Err() break outer default: - data, err := io.ReadAll(reader) - if err != nil { + n, err := reader.Read(data) + if err != nil && err != io.EOF { inErr <- err break outer } - in <- data + in <- data[:n] } } }(outCh, errCh) |
