mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	 b8f7ab5783
			
		
	
	
		b8f7ab5783
		
			
		
	
	
	
	
		
			
			This was missed in gh-19474. It matters for with a per-interpreter GIL since PyDictKeysObject.dk_refcnt breaks isolation and leads to races.
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_INTERNAL_DICT_STATE_H
 | |
| #define Py_INTERNAL_DICT_STATE_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #ifndef Py_BUILD_CORE
 | |
| #  error "this header requires Py_BUILD_CORE define"
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #ifndef WITH_FREELISTS
 | |
| // without freelists
 | |
| #  define PyDict_MAXFREELIST 0
 | |
| #endif
 | |
| 
 | |
| #ifndef PyDict_MAXFREELIST
 | |
| #  define PyDict_MAXFREELIST 80
 | |
| #endif
 | |
| 
 | |
| #define DICT_MAX_WATCHERS 8
 | |
| 
 | |
| struct _Py_dict_state {
 | |
|     /*Global counter used to set ma_version_tag field of dictionary.
 | |
|      * It is incremented each time that a dictionary is created and each
 | |
|      * time that a dictionary is modified. */
 | |
|     uint64_t global_version;
 | |
|     uint32_t next_keys_version;
 | |
| 
 | |
| #if PyDict_MAXFREELIST > 0
 | |
|     /* Dictionary reuse scheme to save calls to malloc and free */
 | |
|     PyDictObject *free_list[PyDict_MAXFREELIST];
 | |
|     PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST];
 | |
|     int numfree;
 | |
|     int keys_numfree;
 | |
| #endif
 | |
| 
 | |
|     PyDict_WatchCallback watchers[DICT_MAX_WATCHERS];
 | |
| };
 | |
| 
 | |
| #define _dict_state_INIT \
 | |
|     { \
 | |
|         .next_keys_version = 2, \
 | |
|     }
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif   /* !Py_INTERNAL_DICT_STATE_H */
 |