summaryrefslogtreecommitdiff
path: root/pkg/util/io.go
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-15 18:17:46 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-15 18:17:46 +0300
commitc5dba4360acff23a89f301235401ddfe19ab99a8 (patch)
treeaf968d5fe4f655930dd07bc90a77e3ae1e83068a /pkg/util/io.go
parent77dca0e1dfd609851a4c80ebb769b21838ec7093 (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.go9
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)