diff --git a/bufpool.go b/bufpool.go index e112cd72..9ff7aece 100644 --- a/bufpool.go +++ b/bufpool.go @@ -47,14 +47,7 @@ func (p *bufPool) calibrateAndClean() { score := p.calls[pos] p.callInd = 0 - p.maxSize = 64 - - for { - if p.maxSize > score { - break - } - p.maxSize <<= 1 - } + p.maxSize = p.normalizeSize(score) p.defaultSize = maxInt(p.defaultSize, p.calls[0]) p.maxSize = maxInt(p.defaultSize, p.maxSize) @@ -82,6 +75,8 @@ func (p *bufPool) Get(size int) *bytes.Buffer { p.mutex.Lock() defer p.mutex.Unlock() + size = p.normalizeSize(size) + minSize, maxSize, minInd, maxInd := -1, -1, -1, -1 for i := 0; i < len(p.buffers); i++ { @@ -155,3 +150,7 @@ func (p *bufPool) Put(buf *bytes.Buffer) { } } } + +func (p *bufPool) normalizeSize(n int) int { + return (n/bytes.MinRead + 2) * bytes.MinRead +}