mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	just use a sync.Pool as the bytestore to not overcomplicate things, the allocations from interface{} casting don't seem to actually hurt in practice right now
This commit is contained in:
		
							parent
							
								
									cbbb61b019
								
							
						
					
					
						commit
						144c823bee
					
				
					 1 changed files with 3 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -22,27 +22,16 @@ func UnlockThread() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// This is used to buffer recently used slices of bytes, to prevent allocations in the hot loops.
 | 
			
		||||
var byteStoreMutex sync.Mutex
 | 
			
		||||
var byteStore [][]byte
 | 
			
		||||
var byteStore = sync.Pool{New: func() interface{} { return []byte(nil) }}
 | 
			
		||||
 | 
			
		||||
// Gets an empty slice from the byte store.
 | 
			
		||||
func GetBytes() []byte {
 | 
			
		||||
	byteStoreMutex.Lock()
 | 
			
		||||
	defer byteStoreMutex.Unlock()
 | 
			
		||||
	if len(byteStore) > 0 {
 | 
			
		||||
		var bs []byte
 | 
			
		||||
		bs, byteStore = byteStore[len(byteStore)-1][:0], byteStore[:len(byteStore)-1]
 | 
			
		||||
		return bs
 | 
			
		||||
	} else {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return byteStore.Get().([]byte)[:0]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Puts a slice in the store.
 | 
			
		||||
func PutBytes(bs []byte) {
 | 
			
		||||
	byteStoreMutex.Lock()
 | 
			
		||||
	defer byteStoreMutex.Unlock()
 | 
			
		||||
	byteStore = append(byteStore, bs)
 | 
			
		||||
	byteStore.Put(bs)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is a workaround to go's broken timer implementation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue