mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 12:22:24 -05:00 
			
		
		
		
	updates go-mutexes to no longer rely on unsafe linkname (#3027)
This commit is contained in:
		
					parent
					
						
							
								b93087ceb4
							
						
					
				
			
			
				commit
				
					
						9143ac6fb4
					
				
			
		
					 19 changed files with 134 additions and 1242 deletions
				
			
		
							
								
								
									
										56
									
								
								vendor/codeberg.org/gruf/go-mutexes/hash_map.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/codeberg.org/gruf/go-mutexes/hash_map.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | |||
| package mutexes | ||||
| 
 | ||||
| type hashmap struct { | ||||
| 	m map[string]*rwmutex | ||||
| 	n int | ||||
| } | ||||
| 
 | ||||
| func (m *hashmap) init(cap int) { | ||||
| 	m.m = make(map[string]*rwmutex, cap) | ||||
| 	m.n = cap | ||||
| } | ||||
| 
 | ||||
| func (m *hashmap) Get(key string) *rwmutex { return m.m[key] } | ||||
| 
 | ||||
| func (m *hashmap) Put(key string, mu *rwmutex) { | ||||
| 	m.m[key] = mu | ||||
| 	if n := len(m.m); n > m.n { | ||||
| 		m.n = n | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (m *hashmap) Delete(key string) { | ||||
| 	delete(m.m, key) | ||||
| } | ||||
| 
 | ||||
| func (m *hashmap) Compact() { | ||||
| 	// Noop when hashmap size | ||||
| 	// is too small to matter. | ||||
| 	if m.n < 2048 { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// Difference between maximum map | ||||
| 	// size and the current map size. | ||||
| 	diff := m.n - len(m.m) | ||||
| 
 | ||||
| 	// Maximum load factor before | ||||
| 	// runtime allocates new hmap: | ||||
| 	// maxLoad = 13 / 16 | ||||
| 	// | ||||
| 	// So we apply the inverse/2, once | ||||
| 	// $maxLoad/2 % of hmap is empty we | ||||
| 	// compact the map to drop buckets. | ||||
| 	if 2*16*diff > m.n*13 { | ||||
| 
 | ||||
| 		// Create new map only as big as required. | ||||
| 		m2 := make(map[string]*rwmutex, len(m.m)) | ||||
| 		for k, v := range m.m { | ||||
| 			m2[k] = v | ||||
| 		} | ||||
| 
 | ||||
| 		// Set new. | ||||
| 		m.m = m2 | ||||
| 		m.n = len(m2) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue