aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Include/internal/pycore_interp_structs.h
diff options
context:
space:
mode:
Diffstat (limited to 'Include/internal/pycore_interp_structs.h')
-rw-r--r--Include/internal/pycore_interp_structs.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/Include/internal/pycore_interp_structs.h b/Include/internal/pycore_interp_structs.h
index af6ee3ab489..f1f427d99de 100644
--- a/Include/internal/pycore_interp_structs.h
+++ b/Include/internal/pycore_interp_structs.h
@@ -159,10 +159,11 @@ struct atexit_state {
typedef struct {
// Tagged pointer to next object in the list.
// 0 means the object is not tracked
- uintptr_t _gc_next;
+ _Py_ALIGNED_DEF(_PyObject_MIN_ALIGNMENT, uintptr_t) _gc_next;
// Tagged pointer to previous object in the list.
// Lowest two bits are used for flags documented later.
+ // Those bits are made available by the struct's minimum alignment.
uintptr_t _gc_prev;
} PyGC_Head;
@@ -245,6 +246,16 @@ struct _gc_runtime_state {
/* True if gc.freeze() has been used. */
int freeze_active;
+
+ /* Memory usage of the process (RSS + swap) after last GC. */
+ Py_ssize_t last_mem;
+
+ /* This accumulates the new object count whenever collection is deferred
+ due to the RSS increase condition not being meet. Reset on collection. */
+ Py_ssize_t deferred_count;
+
+ /* Mutex held for gc_should_collect_mem_usage(). */
+ PyMutex mutex;
#endif
};
@@ -667,8 +678,11 @@ struct _Py_interp_cached_objects {
/* object.__reduce__ */
PyObject *objreduce;
+#ifndef Py_GIL_DISABLED
+ /* resolve_slotdups() */
PyObject *type_slots_pname;
pytype_slotdef *type_slots_ptrs[MAX_EQUIV];
+#endif
/* TypeVar and related types */
PyTypeObject *generic_type;
@@ -716,6 +730,10 @@ typedef struct _PyIndexPool {
// Next index to allocate if no free indices are available
int32_t next_index;
+
+ // Generation counter incremented on thread creation/destruction
+ // Used for TLBC cache invalidation in remote debugging
+ uint32_t tlbc_generation;
} _PyIndexPool;
typedef union _Py_unique_id_entry {
@@ -833,6 +851,8 @@ struct _is {
/* The per-interpreter GIL, which might not be used. */
struct _gil_runtime_state _gil;
+ uint64_t _code_object_generation;
+
/* ---------- IMPORTANT ---------------------------
The fields above this line are declared as early as
possible to facilitate out-of-process observability
@@ -923,6 +943,8 @@ struct _is {
PyObject *common_consts[NUM_COMMON_CONSTANTS];
bool jit;
struct _PyExecutorObject *executor_list_head;
+ struct _PyExecutorObject *executor_deletion_list_head;
+ int executor_deletion_list_remaining_capacity;
size_t trace_run_counter;
_rare_events rare_events;
PyDict_WatchCallback builtins_dict_watcher;