[#425] object: Do not store large slices in pool
ci/woodpecker/pr/pre-commit Pipeline was successful Details

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>
pull/425/head
Dmitrii Stepanov 2023-06-02 17:42:37 +03:00
parent 405e17b2ec
commit 25bedab91a
1 changed files with 7 additions and 1 deletions

View File

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