| 
									
										
										
										
											2023-12-07 14:11:45 -05:00
										 |  |  | #ifndef Py_INTERNAL_TSTATE_H
 | 
					
						
							|  |  |  | #define Py_INTERNAL_TSTATE_H
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef Py_BUILD_CORE
 | 
					
						
							|  |  |  | #  error "this header requires Py_BUILD_CORE define"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-22 12:08:27 -04:00
										 |  |  | #include "pycore_brc.h"             // struct _brc_thread_state
 | 
					
						
							|  |  |  | #include "pycore_freelist_state.h"  // struct _Py_freelists
 | 
					
						
							|  |  |  | #include "pycore_mimalloc.h"        // struct _mimalloc_thread_state
 | 
					
						
							|  |  |  | #include "pycore_qsbr.h"            // struct qsbr
 | 
					
						
							| 
									
										
										
										
											2023-12-26 11:53:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 14:11:45 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Every PyThreadState is actually allocated as a _PyThreadStateImpl. The
 | 
					
						
							|  |  |  | // PyThreadState fields are exposed as part of the C API, although most fields
 | 
					
						
							|  |  |  | // are intended to be private. The _PyThreadStateImpl fields not exposed.
 | 
					
						
							|  |  |  | typedef struct _PyThreadStateImpl { | 
					
						
							|  |  |  |     // semi-public fields are in PyThreadState.
 | 
					
						
							|  |  |  |     PyThreadState base; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 18:21:24 -04:00
										 |  |  |     PyObject *asyncio_running_loop; // Strong reference
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-16 15:25:19 -05:00
										 |  |  |     struct _qsbr_thread_state *qsbr;  // only used by free-threaded build
 | 
					
						
							| 
									
										
										
										
											2024-02-20 13:04:37 -05:00
										 |  |  |     struct llist_node mem_free_queue; // delayed free queue
 | 
					
						
							| 
									
										
										
										
											2024-02-16 15:25:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-26 11:53:20 -05:00
										 |  |  | #ifdef Py_GIL_DISABLED
 | 
					
						
							| 
									
										
										
										
											2024-02-16 11:22:27 -05:00
										 |  |  |     struct _gc_thread_state gc; | 
					
						
							| 
									
										
										
										
											2023-12-26 11:53:20 -05:00
										 |  |  |     struct _mimalloc_thread_state mimalloc; | 
					
						
							| 
									
										
										
										
											2024-07-22 12:08:27 -04:00
										 |  |  |     struct _Py_freelists freelists; | 
					
						
							| 
									
										
										
										
											2024-02-09 17:08:32 -05:00
										 |  |  |     struct _brc_thread_state brc; | 
					
						
							| 
									
										
										
										
											2024-08-06 14:36:57 -04:00
										 |  |  |     struct { | 
					
						
							|  |  |  |         // The thread-local refcounts for heap type objects
 | 
					
						
							|  |  |  |         Py_ssize_t *refcounts; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Size of the refcounts array.
 | 
					
						
							|  |  |  |         Py_ssize_t size; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // If set, don't use thread-local refcounts
 | 
					
						
							|  |  |  |         int is_finalized; | 
					
						
							|  |  |  |     } types; | 
					
						
							| 
									
										
										
										
											2023-12-26 11:53:20 -05:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-08 12:11:36 -04:00
										 |  |  | #if defined(Py_REF_DEBUG) && defined(Py_GIL_DISABLED)
 | 
					
						
							|  |  |  |     Py_ssize_t reftotal;  // this thread's total refcount operations
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 14:11:45 -05:00
										 |  |  | } _PyThreadStateImpl; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif /* !Py_INTERNAL_TSTATE_H */
 |