1package statsd 2 3type bufferPool struct { 4 pool chan *statsdBuffer 5 bufferMaxSize int 6 bufferMaxElements int 7} 8 9func newBufferPool(poolSize, bufferMaxSize, bufferMaxElements int) *bufferPool { 10 p := &bufferPool{ 11 pool: make(chan *statsdBuffer, poolSize), 12 bufferMaxSize: bufferMaxSize, 13 bufferMaxElements: bufferMaxElements, 14 } 15 for i := 0; i < poolSize; i++ { 16 p.addNewBuffer() 17 } 18 return p 19} 20 21func (p *bufferPool) addNewBuffer() { 22 p.pool <- newStatsdBuffer(p.bufferMaxSize, p.bufferMaxElements) 23} 24 25func (p *bufferPool) borrowBuffer() *statsdBuffer { 26 select { 27 case b := <-p.pool: 28 return b 29 default: 30 return newStatsdBuffer(p.bufferMaxSize, p.bufferMaxElements) 31 } 32} 33 34func (p *bufferPool) returnBuffer(buffer *statsdBuffer) { 35 buffer.reset() 36 select { 37 case p.pool <- buffer: 38 default: 39 } 40} 41