mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	gh-81057: Move contextvars-related Globals to _PyRuntimeState (gh-99400)
This is part of the effort to consolidate global variables, to make them easier to manage (and make it easier to later move some of them to PyInterpreterState). https://github.com/python/cpython/issues/81057
This commit is contained in:
		
							parent
							
								
									5f55067e23
								
							
						
					
					
						commit
						01fa907aa8
					
				
					 9 changed files with 82 additions and 90 deletions
				
			
		|  | @ -18,6 +18,10 @@ void _PyContext_Fini(PyInterpreterState *); | |||
| 
 | ||||
| /* other API */ | ||||
| 
 | ||||
| typedef struct { | ||||
|     PyObject_HEAD | ||||
| } _PyContextTokenMissing; | ||||
| 
 | ||||
| #ifndef WITH_FREELISTS | ||||
| // without freelists
 | ||||
| #  define PyContext_MAXFREELIST 0 | ||||
|  |  | |||
|  | @ -10,6 +10,8 @@ extern "C" { | |||
| 
 | ||||
| #include "pycore_gc.h"              // PyGC_Head | ||||
| #include "pycore_global_strings.h"  // struct _Py_global_strings | ||||
| #include "pycore_hamt.h"            // PyHamtNode_Bitmap | ||||
| #include "pycore_context.h"         // _PyContextTokenMissing | ||||
| #include "pycore_typeobject.h"      // pytype_slotdef | ||||
| 
 | ||||
| 
 | ||||
|  | @ -52,6 +54,10 @@ struct _Py_global_objects { | |||
| 
 | ||||
|         _PyGC_Head_UNUSED _tuple_empty_gc_not_used; | ||||
|         PyTupleObject tuple_empty; | ||||
| 
 | ||||
|         _PyGC_Head_UNUSED _hamt_bitmap_node_empty_gc_not_used; | ||||
|         PyHamtNode_Bitmap hamt_bitmap_node_empty; | ||||
|         _PyContextTokenMissing context_token_missing; | ||||
|     } singletons; | ||||
| 
 | ||||
|     PyObject *interned; | ||||
|  | @ -76,6 +82,9 @@ struct _Py_interp_cached_objects { | |||
| struct _Py_interp_static_objects { | ||||
|     struct { | ||||
|         int _not_used; | ||||
|         // hamt_empty is here instead of global because of its weakreflist.
 | ||||
|         _PyGC_Head_UNUSED _hamt_empty_gc_not_used; | ||||
|         PyHamtObject hamt_empty; | ||||
|     } singletons; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1475,6 +1475,9 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { | |||
|     /* non-generated */ | ||||
|     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_empty)); | ||||
|     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(tuple_empty)); | ||||
|     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(hamt_bitmap_node_empty)); | ||||
|     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_INTERP_SINGLETON(interp, hamt_empty)); | ||||
|     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(context_token_missing)); | ||||
| } | ||||
| #endif  // Py_DEBUG
 | ||||
| /* End auto-generated code */ | ||||
|  |  | |||
|  | @ -28,10 +28,6 @@ extern PyTypeObject _PyHamtKeys_Type; | |||
| extern PyTypeObject _PyHamtValues_Type; | ||||
| extern PyTypeObject _PyHamtItems_Type; | ||||
| 
 | ||||
| /* runtime lifecycle */ | ||||
| 
 | ||||
| void _PyHamt_Fini(PyInterpreterState *); | ||||
| 
 | ||||
| 
 | ||||
| /* other API */ | ||||
| 
 | ||||
|  | @ -53,6 +49,13 @@ typedef struct { | |||
| } PyHamtObject; | ||||
| 
 | ||||
| 
 | ||||
| typedef struct { | ||||
|     PyObject_VAR_HEAD | ||||
|     uint32_t b_bitmap; | ||||
|     PyObject *b_array[1]; | ||||
| } PyHamtNode_Bitmap; | ||||
| 
 | ||||
| 
 | ||||
| /* A struct to hold the state of depth-first traverse of the tree.
 | ||||
| 
 | ||||
|    HAMT is an immutable collection.  Iterators will hold a strong reference | ||||
|  |  | |||
|  | @ -75,6 +75,12 @@ extern "C" { | |||
|                 .tuple_empty = { \ | ||||
|                     .ob_base = _PyVarObject_IMMORTAL_INIT(&PyTuple_Type, 0) \ | ||||
|                 }, \ | ||||
|                 .hamt_bitmap_node_empty = { \ | ||||
|                     .ob_base = _PyVarObject_IMMORTAL_INIT(&_PyHamt_BitmapNode_Type, 0) \ | ||||
|                 }, \ | ||||
|                 .context_token_missing = { \ | ||||
|                     .ob_base = _PyObject_IMMORTAL_INIT(&_PyContextTokenMissing_Type), \ | ||||
|                 }, \ | ||||
|             }, \ | ||||
|         }, \ | ||||
|         ._main_interpreter = _PyInterpreterState_INIT, \ | ||||
|  | @ -112,6 +118,10 @@ extern "C" { | |||
|         .static_objects = { \ | ||||
|             .singletons = { \ | ||||
|                 ._not_used = 1, \ | ||||
|                 .hamt_empty = { \ | ||||
|                     .ob_base = _PyObject_IMMORTAL_INIT(&_PyHamt_Type), \ | ||||
|                     .h_root = (PyHamtNode*)&_Py_SINGLETON(hamt_bitmap_node_empty), \ | ||||
|                 }, \ | ||||
|             }, \ | ||||
|         }, \ | ||||
|         ._initial_thread = _PyThreadState_INIT, \ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Snow
						Eric Snow