From 708e14fcfa7182a08a8ed02c250d49de8eb3b5a6 Mon Sep 17 00:00:00 2001 From: chrislu Date: Sat, 26 Feb 2022 03:22:41 -0800 Subject: [PATCH] avoid possible too big memory allocation --- weed/util/mem/slot_pool.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/weed/util/mem/slot_pool.go b/weed/util/mem/slot_pool.go index 5bd759ab7..f7aa86e05 100644 --- a/weed/util/mem/slot_pool.go +++ b/weed/util/mem/slot_pool.go @@ -41,14 +41,23 @@ func getSlotPool(size int) *sync.Pool { var total int64 func Allocate(size int) []byte { - newVal := atomic.AddInt64(&total, 1) - glog.V(4).Infof("++> %d", newVal) - slab := *getSlotPool(size).Get().(*[]byte) - return slab[:size] + pool := getSlotPool(size) + if pool != nil { + + newVal := atomic.AddInt64(&total, 1) + glog.V(4).Infof("++> %d", newVal) + + slab := *pool.Get().(*[]byte) + return slab[:size] + } + return make([]byte, size) } func Free(buf []byte) { - newVal := atomic.AddInt64(&total, -1) - glog.V(4).Infof("--> %d", newVal) - getSlotPool(cap(buf)).Put(&buf) + pool := getSlotPool(cap(buf)) + if pool != nil { + newVal := atomic.AddInt64(&total, -1) + glog.V(4).Infof("--> %d", newVal) + pool.Put(&buf) + } }