mirror of https://github.com/v2ray/v2ray-core
properly propagate Reader errors
parent
e52d3fa90b
commit
8da0a53845
|
@ -131,7 +131,7 @@ func (b *Buffer) IsEmpty() bool {
|
||||||
|
|
||||||
// IsFull returns true if the buffer has no more room to grow.
|
// IsFull returns true if the buffer has no more room to grow.
|
||||||
func (b *Buffer) IsFull() bool {
|
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.
|
// Write implements Write method in io.Writer.
|
||||||
|
|
|
@ -27,12 +27,12 @@ func readOneUDP(r io.Reader) (*Buffer, error) {
|
||||||
// ReadBuffer reads a Buffer from the given reader.
|
// ReadBuffer reads a Buffer from the given reader.
|
||||||
func ReadBuffer(r io.Reader) (*Buffer, error) {
|
func ReadBuffer(r io.Reader) (*Buffer, error) {
|
||||||
b := New()
|
b := New()
|
||||||
_, err := b.ReadFrom(r)
|
n, err := b.ReadFrom(r)
|
||||||
if err != nil {
|
if n > 0 {
|
||||||
b.Release()
|
return b, err
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
return b, nil
|
b.Release()
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// BufferedReader is a Reader that keeps its internal buffer.
|
// BufferedReader is a Reader that keeps its internal buffer.
|
||||||
|
@ -156,10 +156,7 @@ type SingleReader struct {
|
||||||
// ReadMultiBuffer implements Reader.
|
// ReadMultiBuffer implements Reader.
|
||||||
func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error) {
|
func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error) {
|
||||||
b, err := ReadBuffer(r.Reader)
|
b, err := ReadBuffer(r.Reader)
|
||||||
if err != nil {
|
return MultiBuffer{b}, err
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return MultiBuffer{b}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PacketReader is a Reader that read one Buffer every time.
|
// PacketReader is a Reader that read one Buffer every time.
|
||||||
|
|
|
@ -120,13 +120,10 @@ func (r *ReadVReader) readMulti() (MultiBuffer, error) {
|
||||||
func (r *ReadVReader) ReadMultiBuffer() (MultiBuffer, error) {
|
func (r *ReadVReader) ReadMultiBuffer() (MultiBuffer, error) {
|
||||||
if r.alloc.Current() == 1 {
|
if r.alloc.Current() == 1 {
|
||||||
b, err := ReadBuffer(r.Reader)
|
b, err := ReadBuffer(r.Reader)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if b.IsFull() {
|
if b.IsFull() {
|
||||||
r.alloc.Adjust(1)
|
r.alloc.Adjust(1)
|
||||||
}
|
}
|
||||||
return MultiBuffer{b}, nil
|
return MultiBuffer{b}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
mb, err := r.readMulti()
|
mb, err := r.readMulti()
|
||||||
|
|
Loading…
Reference in New Issue