@@ -31,7 +31,7 @@ type buffer struct {
3131
3232func newBuffer (nc net.Conn ) buffer {
3333 return buffer {
34- buf : make ([]byte , defaultBufSize , defaultBufSize ),
34+ buf : make ([]byte , defaultBufSize ),
3535 nc : nc ,
3636 }
3737}
@@ -50,8 +50,7 @@ func (b *buffer) fill(need int) error {
5050 // Maybe keep the org buf slice and swap back?
5151 if need > len (b .buf ) {
5252 // Round up to the next multiple of the default size
53- newSize := ((need / defaultBufSize ) + 1 ) * defaultBufSize
54- newBuf := make ([]byte , newSize , newSize )
53+ newBuf := make ([]byte , ((need / defaultBufSize )+ 1 )* defaultBufSize )
5554 copy (newBuf , b .buf )
5655 b .buf = newBuf
5756 }
@@ -119,7 +118,7 @@ func (b *buffer) takeBuffer(length int) []byte {
119118 }
120119
121120 if length < maxPacketSize {
122- b .buf = make ([]byte , length , length )
121+ b .buf = make ([]byte , length )
123122 return b .buf
124123 }
125124 return make ([]byte , length )
@@ -149,7 +148,9 @@ func (b *buffer) takeCompleteBuffer() []byte {
149148// than len(b.buf). It can be used when you took buffer by
150149// takeCompleteBuffer and append some data to it.
151150func (b * buffer ) setGrownBuffer (buf []byte ) {
152- if cap (buf ) >= len (b .buf ) {
153- b .buf = buf [:cap (buf )]
151+ // buf may be grown by `buf = append(buf, ...)`. So set len=cap explicitly.
152+ buf = buf [:cap (buf )]
153+ if len (buf ) > len (b .buf ) {
154+ b .buf = buf
154155 }
155156}
0 commit comments