avoid possible too big memory allocation

This commit is contained in:
chrislu 2022-02-26 03:22:41 -08:00
parent 3345a50d9b
commit 708e14fcfa

View file

@ -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)
}
}