| 
					
				 | 
			
			
				@@ -36,20 +36,18 @@ func (b *Buffer) Len() int { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type bufferPool struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	chain       chan *Buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	allocator   func(*bufferPool) *Buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	minElements int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	maxElements int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	chain         chan *Buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	allocator     func(*bufferPool) *Buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	elements2Keep int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func newBufferPool(allocator func(*bufferPool) *Buffer, minElements, maxElements int) *bufferPool { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func newBufferPool(allocator func(*bufferPool) *Buffer, elements2Keep, size int) *bufferPool { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	pool := &bufferPool{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		chain:       make(chan *Buffer, maxElements*2), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		allocator:   allocateSmall, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		minElements: minElements, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		maxElements: maxElements, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		chain:         make(chan *Buffer, size), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		allocator:     allocateSmall, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		elements2Keep: elements2Keep, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for i := 0; i < minElements; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := 0; i < elements2Keep; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		pool.chain <- allocator(pool) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	go pool.cleanup(time.Tick(1 * time.Second)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,11 +77,12 @@ func (p *bufferPool) free(buffer *Buffer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (p *bufferPool) cleanup(tick <-chan time.Time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for range tick { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		pSize := len(p.chain) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for delta := pSize - p.minElements; delta > 0; delta-- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			p.chain <- p.allocator(p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for delta := p.maxElements - pSize; delta > 0; delta-- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if pSize > p.elements2Keep { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<-p.chain 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for delta := pSize - p.elements2Keep; delta > 0; delta-- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			p.chain <- p.allocator(p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,7 +96,7 @@ func allocateSmall(pool *bufferPool) *Buffer { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var smallPool = newBufferPool(allocateSmall, 256, 1024) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var smallPool = newBufferPool(allocateSmall, 256, 2048) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func NewBuffer() *Buffer { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return smallPool.allocate() 
			 |