diff --git a/buffer.go b/buffer.go index 98a5c8b8194cbe0d812cca6613c8feb116b04245..364722bdefff2abe5e97d3784885b4e1dbb36e45 100644 --- a/buffer.go +++ b/buffer.go @@ -253,11 +253,18 @@ func (b *Buffer) Read(buf []byte) (int, error) { } func (b *Buffer) shrink() { + c := b.Cap() + // Either nil or bootstrap. + if c <= len(b.bootstrap) { + return + } + l := b.Len() if l == 0 { + // Shortcut if empty. b.returnBuf() b.rOff = 0 - } else if l*8 < b.Cap() { + } else if l*8 < c { // Only shrink when capacity > 8x length. Avoids shrinking too aggressively. newBuf := b.getBuf(l) copy(newBuf, b.buf[b.rOff:])