소스 검색

Run GC if some buffers were removerd from a pool

DarthSim 6 년 전
부모
커밋
5d6c5bbc04
1개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      bufpool.go

+ 8 - 0
bufpool.go

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