2023-12-07 15:11:45 -04: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 13:08:27 -03: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 12:53:20 -04:00
|
|
|
|
2023-12-07 15:11:45 -04: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 19:21:24 -03:00
|
|
|
PyObject *asyncio_running_loop; // Strong reference
|
|
|
|
|
2024-02-16 16:25:19 -04:00
|
|
|
struct _qsbr_thread_state *qsbr; // only used by free-threaded build
|
2024-02-20 14:04:37 -04:00
|
|
|
struct llist_node mem_free_queue; // delayed free queue
|
2024-02-16 16:25:19 -04:00
|
|
|
|
2023-12-26 12:53:20 -04:00
|
|
|
#ifdef Py_GIL_DISABLED
|
2024-02-16 12:22:27 -04:00
|
|
|
struct _gc_thread_state gc;
|
2023-12-26 12:53:20 -04:00
|
|
|
struct _mimalloc_thread_state mimalloc;
|
2024-07-22 13:08:27 -03:00
|
|
|
struct _Py_freelists freelists;
|
2024-02-09 18:08:32 -04:00
|
|
|
struct _brc_thread_state brc;
|
2024-08-06 15:36:57 -03:00
|
|
|
struct {
|
2024-10-01 14:05:42 -03:00
|
|
|
// The per-thread refcounts
|
|
|
|
Py_ssize_t *values;
|
2024-08-06 15:36:57 -03:00
|
|
|
|
|
|
|
// Size of the refcounts array.
|
|
|
|
Py_ssize_t size;
|
|
|
|
|
2024-10-01 14:05:42 -03:00
|
|
|
// If set, don't use per-thread refcounts
|
2024-08-06 15:36:57 -03:00
|
|
|
int is_finalized;
|
2024-10-01 14:05:42 -03:00
|
|
|
} refcounts;
|
2024-10-24 19:09:59 -03:00
|
|
|
|
2024-11-04 15:13:32 -04:00
|
|
|
// Index to use to retrieve thread-local bytecode for this thread
|
|
|
|
int32_t tlbc_index;
|
|
|
|
|
2024-10-24 19:09:59 -03:00
|
|
|
// When >1, code objects do not immortalize their non-string constants.
|
|
|
|
int suppress_co_const_immortalization;
|
2023-12-26 12:53:20 -04:00
|
|
|
#endif
|
|
|
|
|
2024-04-08 13:11:36 -03:00
|
|
|
#if defined(Py_REF_DEBUG) && defined(Py_GIL_DISABLED)
|
|
|
|
Py_ssize_t reftotal; // this thread's total refcount operations
|
|
|
|
#endif
|
|
|
|
|
2023-12-07 15:11:45 -04:00
|
|
|
} _PyThreadStateImpl;
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif /* !Py_INTERNAL_TSTATE_H */
|