[#425] object: Do not store large slices in pool

Dynamically growing an unbounded buffers can cause a large
amount of memory to be pinned and never be freed.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2023-06-02 17:42:37 +03:00
parent 405e17b2ec
commit 25bedab91a

View file

@ -4,7 +4,10 @@ import (
"sync"
)
const defaultAllocSize = 1024
const (
defaultAllocSize = 1024
poolSliceMaxSize = 128 * 1024
)
type payload struct {
Data []byte
@ -19,6 +22,9 @@ func getPayload() *payload {
}
func putPayload(p *payload) {
if cap(p.Data) > poolSliceMaxSize {
return
}
p.Data = p.Data[:0]
putBytesPool.Put(p)
}