From 784583afc6513f2083190a1e0765cf181b88cba6 Mon Sep 17 00:00:00 2001 From: chrislu Date: Wed, 2 Mar 2022 13:50:28 -0800 Subject: [PATCH] avoid pool memory allocation if too large --- weed/util/mem/slot_pool.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/weed/util/mem/slot_pool.go b/weed/util/mem/slot_pool.go index f7aa86e05..b3493febf 100644 --- a/weed/util/mem/slot_pool.go +++ b/weed/util/mem/slot_pool.go @@ -33,17 +33,18 @@ func init() { } } -func getSlotPool(size int) *sync.Pool { +func getSlotPool(size int) (*sync.Pool, bool) { index := bitCount(size) - return pools[index] + if index >= len(pools) { + return nil, false + } + return pools[index], true } var total int64 func Allocate(size int) []byte { - pool := getSlotPool(size) - if pool != nil { - + if pool, found := getSlotPool(size); found { newVal := atomic.AddInt64(&total, 1) glog.V(4).Infof("++> %d", newVal) @@ -54,8 +55,7 @@ func Allocate(size int) []byte { } func Free(buf []byte) { - pool := getSlotPool(cap(buf)) - if pool != nil { + if pool, found := getSlotPool(cap(buf)); found { newVal := atomic.AddInt64(&total, -1) glog.V(4).Infof("--> %d", newVal) pool.Put(&buf)