mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	* Some changes to fix recovery * Move Recovery to middlewares * Remove trace code * Fix lint * add session middleware and remove dependent on macaron for sso * Fix panic 500 page rendering * Fix bugs * Fix fmt * Fix vendor * recover unnecessary change * Fix lint and addd some comments about the copied codes. * Use util.StatDir instead of com.StatDir Co-authored-by: 6543 <6543@obermui.de>
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
package render
 | 
						|
 | 
						|
import "bytes"
 | 
						|
 | 
						|
// bufPool represents a reusable buffer pool for executing templates into.
 | 
						|
var bufPool *BufferPool
 | 
						|
 | 
						|
// BufferPool implements a pool of bytes.Buffers in the form of a bounded channel.
 | 
						|
// Pulled from the github.com/oxtoacart/bpool package (Apache licensed).
 | 
						|
type BufferPool struct {
 | 
						|
	c chan *bytes.Buffer
 | 
						|
}
 | 
						|
 | 
						|
// NewBufferPool creates a new BufferPool bounded to the given size.
 | 
						|
func NewBufferPool(size int) (bp *BufferPool) {
 | 
						|
	return &BufferPool{
 | 
						|
		c: make(chan *bytes.Buffer, size),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Get gets a Buffer from the BufferPool, or creates a new one if none are
 | 
						|
// available in the pool.
 | 
						|
func (bp *BufferPool) Get() (b *bytes.Buffer) {
 | 
						|
	select {
 | 
						|
	case b = <-bp.c:
 | 
						|
	// reuse existing buffer
 | 
						|
	default:
 | 
						|
		// create new buffer
 | 
						|
		b = bytes.NewBuffer([]byte{})
 | 
						|
	}
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
// Put returns the given Buffer to the BufferPool.
 | 
						|
func (bp *BufferPool) Put(b *bytes.Buffer) {
 | 
						|
	b.Reset()
 | 
						|
	select {
 | 
						|
	case bp.c <- b:
 | 
						|
	default: // Discard the buffer if the pool is full.
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Initialize buffer pool for writing templates into.
 | 
						|
func init() {
 | 
						|
	bufPool = NewBufferPool(64)
 | 
						|
}
 |