1
0
Эх сурвалжийг харах

Run GC if some buffers were removerd from a pool

DarthSim 6 жил өмнө
parent
commit
5d6c5bbc04
1 өөрчлөгдсөн 8 нэмэгдсэн , 0 устгасан
  1. 8 0
      bufpool.go

+ 8 - 0
bufpool.go

@@ -2,6 +2,7 @@ package main
 
 
 import (
 import (
 	"bytes"
 	"bytes"
+	"runtime"
 	"sort"
 	"sort"
 	"sync"
 	"sync"
 )
 )
@@ -58,12 +59,19 @@ func (p *bufPool) calibrateAndClean() {
 	p.defaultSize = maxInt(p.defaultSize, p.calls[0])
 	p.defaultSize = maxInt(p.defaultSize, p.calls[0])
 	p.maxSize = maxInt(p.defaultSize, p.maxSize)
 	p.maxSize = maxInt(p.defaultSize, p.maxSize)
 
 
+	cleaned := false
+
 	for i, buf := range p.buffers {
 	for i, buf := range p.buffers {
 		if buf != nil && buf.Cap() > p.maxSize {
 		if buf != nil && buf.Cap() > p.maxSize {
 			p.buffers[i] = nil
 			p.buffers[i] = nil
+			cleaned = true
 		}
 		}
 	}
 	}
 
 
+	if cleaned {
+		runtime.GC()
+	}
+
 	if prometheusEnabled {
 	if prometheusEnabled {
 		setPrometheusBufferDefaultSize(p.name, p.defaultSize)
 		setPrometheusBufferDefaultSize(p.name, p.defaultSize)
 		setPrometheusBufferMaxSize(p.name, p.maxSize)
 		setPrometheusBufferMaxSize(p.name, p.maxSize)