|  | @@ -8,14 +8,18 @@ import (
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Pool provides functionality to generate and recycle buffers on demand.
 | 
	
		
			
				|  |  |  type Pool interface {
 | 
	
		
			
				|  |  | +	// Allocate either returns a unused buffer from the pool, or generates a new one from system.
 | 
	
		
			
				|  |  |  	Allocate() *Buffer
 | 
	
		
			
				|  |  | +	// Free recycles the given buffer.
 | 
	
		
			
				|  |  |  	Free(*Buffer)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// SyncPool is a buffer pool based on sync.Pool
 | 
	
		
			
				|  |  |  type SyncPool struct {
 | 
	
		
			
				|  |  |  	allocator *sync.Pool
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// NewSyncPool creates a SyncPool with given buffer size.
 | 
	
		
			
				|  |  |  func NewSyncPool(bufferSize uint32) *SyncPool {
 | 
	
		
			
				|  |  |  	pool := &SyncPool{
 | 
	
		
			
				|  |  |  		allocator: &sync.Pool{
 | 
	
	
		
			
				|  | @@ -25,10 +29,12 @@ func NewSyncPool(bufferSize uint32) *SyncPool {
 | 
	
		
			
				|  |  |  	return pool
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// Allocate implements Pool.Allocate().
 | 
	
		
			
				|  |  |  func (p *SyncPool) Allocate() *Buffer {
 | 
	
		
			
				|  |  |  	return CreateBuffer(p.allocator.Get().([]byte), p)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// Free implements Pool.Free().
 | 
	
		
			
				|  |  |  func (p *SyncPool) Free(buffer *Buffer) {
 | 
	
		
			
				|  |  |  	rawBuffer := buffer.head
 | 
	
		
			
				|  |  |  	if rawBuffer == nil {
 |