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