Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

properly propagate Reader errors #2041

Merged
merged 1 commit into from
Nov 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
properly propagate Reader errors
  • Loading branch information
ghost committed Nov 22, 2019
commit 8da0a538454ef30e39ab8bf4077a23dcebb4b6e1
2 changes: 1 addition & 1 deletion common/buf/buffer.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func (b *Buffer) IsEmpty() bool {

// IsFull returns true if the buffer has no more room to grow.
func (b *Buffer) IsFull() bool {
return b.end == int32(len(b.v))
return b != nil && b.end == int32(len(b.v))
}

// Write implements Write method in io.Writer.
Expand Down
15 changes: 6 additions & 9 deletions common/buf/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ func readOneUDP(r io.Reader) (*Buffer, error) {
// ReadBuffer reads a Buffer from the given reader.
func ReadBuffer(r io.Reader) (*Buffer, error) {
b := New()
_, err := b.ReadFrom(r)
if err != nil {
b.Release()
return nil, err
n, err := b.ReadFrom(r)
if n > 0 {
return b, err
}
return b, nil
b.Release()
return nil, err
}

// BufferedReader is a Reader that keeps its internal buffer.
Expand Down Expand Up @@ -156,10 +156,7 @@ type SingleReader struct {
// ReadMultiBuffer implements Reader.
func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error) {
b, err := ReadBuffer(r.Reader)
if err != nil {
return nil, err
}
return MultiBuffer{b}, nil
return MultiBuffer{b}, err
}

// PacketReader is a Reader that read one Buffer every time.
Expand Down
5 changes: 1 addition & 4 deletions common/buf/readv_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,10 @@ func (r *ReadVReader) readMulti() (MultiBuffer, error) {
func (r *ReadVReader) ReadMultiBuffer() (MultiBuffer, error) {
if r.alloc.Current() == 1 {
b, err := ReadBuffer(r.Reader)
if err != nil {
return nil, err
}
if b.IsFull() {
r.alloc.Adjust(1)
}
return MultiBuffer{b}, nil
return MultiBuffer{b}, err
}

mb, err := r.readMulti()
Expand Down