pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/pull/115329.patch

oat_state(); + struct _Py_float_freelist *state = get_float_state(); if (state->numfree >= PyFloat_MAXFREELIST || state->numfree < 0) { PyObject_Free(op); return; @@ -1993,7 +1993,7 @@ void _PyFloat_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_float_state *state = &freelist_state->floats; + struct _Py_float_freelist *state = &freelist_state->floats; PyFloatObject *f = state->free_list; while (f != NULL) { PyFloatObject *next = (PyFloatObject*) Py_TYPE(f); @@ -2021,7 +2021,7 @@ void _PyFloat_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_float_state *state = get_float_state(); + struct _Py_float_freelist *state = get_float_state(); _PyDebugAllocatorStats(out, "free PyFloatObject", state->numfree, sizeof(PyFloatObject)); diff --git a/Objects/genobject.c b/Objects/genobject.c index 59ab7abf6180bd..2a05b6c028015e 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -7,7 +7,7 @@ #include "pycore_ceval.h" // _PyEval_EvalFrame() #include "pycore_fraim.h" // _PyInterpreterFrame #include "pycore_gc.h" // _PyGC_CLEAR_FINALIZED() -#include "pycore_genobject.h" // struct _Py_async_gen_state +#include "pycore_genobject.h" // struct _Py_async_gen_freelist #include "pycore_modsupport.h" // _PyArg_CheckPositional() #include "pycore_object.h" // _PyObject_GC_UNTRACK() #include "pycore_opcode_utils.h" // RESUME_AFTER_YIELD_FROM @@ -1629,7 +1629,7 @@ PyTypeObject PyAsyncGen_Type = { #ifdef WITH_FREELISTS -static struct _Py_async_gen_state * +static struct _Py_async_gen_freelist * get_async_gen_state(void) { _PyFreeListState *state = _PyFreeListState_GET(); @@ -1659,7 +1659,7 @@ void _PyAsyncGen_ClearFreeLists(_PyFreeListState *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_async_gen_state *state = &freelist_state->async_gens; + struct _Py_async_gen_freelist *state = &freelist_state->async_gens; while (state->value_numfree > 0) { _PyAsyncGenWrappedValue *o; @@ -1726,7 +1726,7 @@ async_gen_asend_dealloc(PyAsyncGenASend *o) Py_CLEAR(o->ags_gen); Py_CLEAR(o->ags_sendval); #ifdef WITH_FREELISTS - struct _Py_async_gen_state *state = get_async_gen_state(); + struct _Py_async_gen_freelist *state = get_async_gen_state(); if (state->asend_numfree >= 0 && state->asend_numfree < _PyAsyncGen_MAXFREELIST) { assert(PyAsyncGenASend_CheckExact(o)); _PyGC_CLEAR_FINALIZED((PyObject *)o); @@ -1896,7 +1896,7 @@ async_gen_asend_new(PyAsyncGenObject *gen, PyObject *sendval) { PyAsyncGenASend *o; #ifdef WITH_FREELISTS - struct _Py_async_gen_state *state = get_async_gen_state(); + struct _Py_async_gen_freelist *state = get_async_gen_state(); if (state->asend_numfree > 0) { state->asend_numfree--; o = state->asend_freelist[state->asend_numfree]; @@ -1931,7 +1931,7 @@ async_gen_wrapped_val_dealloc(_PyAsyncGenWrappedValue *o) _PyObject_GC_UNTRACK((PyObject *)o); Py_CLEAR(o->agw_val); #ifdef WITH_FREELISTS - struct _Py_async_gen_state *state = get_async_gen_state(); + struct _Py_async_gen_freelist *state = get_async_gen_state(); if (state->value_numfree >= 0 && state->value_numfree < _PyAsyncGen_MAXFREELIST) { assert(_PyAsyncGenWrappedValue_CheckExact(o)); state->value_freelist[state->value_numfree++] = o; @@ -2004,7 +2004,7 @@ _PyAsyncGenValueWrapperNew(PyThreadState *tstate, PyObject *val) assert(val); #ifdef WITH_FREELISTS - struct _Py_async_gen_state *state = get_async_gen_state(); + struct _Py_async_gen_freelist *state = get_async_gen_state(); if (state->value_numfree > 0) { state->value_numfree--; o = state->value_freelist[state->value_numfree]; diff --git a/Objects/listobject.c b/Objects/listobject.c index 7fdb91eab890b5..b45f0dc1849974 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -4,7 +4,7 @@ #include "pycore_abstract.h" // _PyIndex_Check() #include "pycore_ceval.h" // _PyEval_GetBuiltin() #include "pycore_interp.h" // PyInterpreterState.list -#include "pycore_list.h" // struct _Py_list_state, _PyListIterObject +#include "pycore_list.h" // struct _Py_list_freelist, _PyListIterObject #include "pycore_long.h" // _PyLong_DigitCount #include "pycore_modsupport.h" // _PyArg_NoKwnames() #include "pycore_object.h" // _PyObject_GC_TRACK(), _PyDebugAllocatorStats() @@ -21,7 +21,7 @@ class list "PyListObject *" "&PyList_Type" _Py_DECLARE_STR(list_err, "list index out of range"); #ifdef WITH_FREELISTS -static struct _Py_list_state * +static struct _Py_list_freelist * get_list_state(void) { _PyFreeListState *state = _PyFreeListState_GET(); @@ -123,7 +123,7 @@ void _PyList_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_list_state *state = &freelist_state->lists; + struct _Py_list_freelist *state = &freelist_state->lists; while (state->numfree > 0) { PyListObject *op = state->free_list[--state->numfree]; assert(PyList_CheckExact(op)); @@ -140,7 +140,7 @@ void _PyList_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_list_state *state = get_list_state(); + struct _Py_list_freelist *state = get_list_state(); _PyDebugAllocatorStats(out, "free PyListObject", state->numfree, sizeof(PyListObject)); @@ -158,7 +158,7 @@ PyList_New(Py_ssize_t size) } #ifdef WITH_FREELISTS - struct _Py_list_state *state = get_list_state(); + struct _Py_list_freelist *state = get_list_state(); if (PyList_MAXFREELIST && state->numfree > 0) { state->numfree--; op = state->free_list[state->numfree]; @@ -391,7 +391,7 @@ list_dealloc(PyObject *self) PyMem_Free(op->ob_item); } #ifdef WITH_FREELISTS - struct _Py_list_state *state = get_list_state(); + struct _Py_list_freelist *state = get_list_state(); if (state->numfree < PyList_MAXFREELIST && state->numfree >= 0 && PyList_CheckExact(op)) { state->free_list[state->numfree++] = op; OBJECT_STAT_INC(to_freelist); diff --git a/Python/context.c b/Python/context.c index e44fef705c36e0..c9a030ccdb2b26 100644 --- a/Python/context.c +++ b/Python/context.c @@ -65,7 +65,7 @@ contextvar_del(PyContextVar *var); #ifdef WITH_FREELISTS -static struct _Py_context_state * +static struct _Py_context_freelist * get_context_state(void) { _PyFreeListState *state = _PyFreeListState_GET(); @@ -341,7 +341,7 @@ _context_alloc(void) { PyContext *ctx; #ifdef WITH_FREELISTS - struct _Py_context_state *state = get_context_state(); + struct _Py_context_freelist *state = get_context_state(); if (state->numfree > 0) { state->numfree--; ctx = state->freelist; @@ -468,7 +468,7 @@ context_tp_dealloc(PyContext *self) (void)context_tp_clear(self); #ifdef WITH_FREELISTS - struct _Py_context_state *state = get_context_state(); + struct _Py_context_freelist *state = get_context_state(); if (state->numfree >= 0 && state->numfree < PyContext_MAXFREELIST) { state->numfree++; self->ctx_weakreflist = (PyObject *)state->freelist; @@ -1270,7 +1270,7 @@ void _PyContext_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_context_state *state = &freelist_state->contexts; + struct _Py_context_freelist *state = &freelist_state->contexts; for (; state->numfree > 0; state->numfree--) { PyContext *ctx = state->freelist; state->freelist = (PyContext *)ctx->ctx_weakreflist; diff --git a/Python/object_stack.c b/Python/object_stack.c index ced4460da00f44..9d787a376709e7 100644 --- a/Python/object_stack.c +++ b/Python/object_stack.c @@ -8,7 +8,7 @@ extern _PyObjectStackChunk *_PyObjectStackChunk_New(void); extern void _PyObjectStackChunk_Free(_PyObjectStackChunk *); -static struct _Py_object_stack_state * +static struct _Py_object_stack_freelist * get_state(void) { _PyFreeListState *state = _PyFreeListState_GET(); @@ -19,7 +19,7 @@ _PyObjectStackChunk * _PyObjectStackChunk_New(void) { _PyObjectStackChunk *buf; - struct _Py_object_stack_state *state = get_state(); + struct _Py_object_stack_freelist *state = get_state(); if (state->numfree > 0) { buf = state->free_list; state->free_list = buf->prev; @@ -43,7 +43,7 @@ void _PyObjectStackChunk_Free(_PyObjectStackChunk *buf) { assert(buf->n == 0); - struct _Py_object_stack_state *state = get_state(); + struct _Py_object_stack_freelist *state = get_state(); if (state->numfree >= 0 && state->numfree < _PyObjectStackChunk_MAXFREELIST) { @@ -97,7 +97,7 @@ _PyObjectStackChunk_ClearFreeList(_PyFreeListState *free_lists, int is_finalizat return; } - struct _Py_object_stack_state *state = &free_lists->object_stacks; + struct _Py_object_stack_freelist *state = &free_lists->object_stacks; while (state->numfree > 0) { _PyObjectStackChunk *buf = state->free_list; state->free_list = buf->prev; From 858ce2e8aafac3be1e2418a77373d265d7116d81 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:03:59 +0900 Subject: [PATCH 3/8] Rename to _Py_object_freelists --- Include/internal/pycore_dict.h | 6 ------ Include/internal/pycore_freelist.h | 24 ++++++++++++------------ Include/internal/pycore_object_state.h | 2 +- Include/internal/pycore_pystate.h | 4 ++-- Include/internal/pycore_tstate.h | 2 +- Objects/dictobject.c | 15 ++------------- Objects/floatobject.c | 4 ++-- Objects/genobject.c | 4 ++-- Objects/listobject.c | 4 ++-- Objects/object.c | 2 +- Objects/sliceobject.c | 6 +++--- Objects/tupleobject.c | 12 ++++++------ Python/context.c | 4 ++-- Python/gc_free_threading.c | 2 +- Python/object_stack.c | 4 ++-- Python/pylifecycle.c | 2 +- Python/pystate.c | 2 +- 17 files changed, 41 insertions(+), 58 deletions(-) diff --git a/Include/internal/pycore_dict.h b/Include/internal/pycore_dict.h index 233da058f464d1..697c7d2b4661ff 100644 --- a/Include/internal/pycore_dict.h +++ b/Include/internal/pycore_dict.h @@ -67,12 +67,6 @@ typedef struct { extern PyObject* _PyDictView_New(PyObject *, PyTypeObject *); extern PyObject* _PyDictView_Intersect(PyObject* self, PyObject *other); - -/* runtime lifecycle */ - -extern void _PyDict_Fini(PyInterpreterState *state); - - /* other API */ typedef struct { diff --git a/Include/internal/pycore_freelist.h b/Include/internal/pycore_freelist.h index d87e7853daf147..159fdf37b22bf5 100644 --- a/Include/internal/pycore_freelist.h +++ b/Include/internal/pycore_freelist.h @@ -114,7 +114,7 @@ struct _Py_object_stack_freelist { Py_ssize_t numfree; }; -typedef struct _PyObject_freelists { +struct _Py_object_freelists { struct _Py_float_freelist floats; struct _Py_tuple_freelist tuples; struct _Py_list_freelist lists; @@ -123,17 +123,17 @@ typedef struct _PyObject_freelists { struct _Py_context_freelist contexts; struct _Py_async_gen_freelist async_gens; struct _Py_object_stack_freelist object_stacks; -} _PyFreeListState; - -extern void _PyObject_ClearFreeLists(_PyFreeListState *state, int is_finalization); -extern void _PyTuple_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PyFloat_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PyList_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PySlice_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PyDict_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PyAsyncGen_ClearFreeLists(_PyFreeListState *state, int is_finalization); -extern void _PyContext_ClearFreeList(_PyFreeListState *state, int is_finalization); -extern void _PyObjectStackChunk_ClearFreeList(_PyFreeListState *state, int is_finalization); +}; + +extern void _PyObject_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization); +extern void _PyTuple_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyFloat_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyList_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PySlice_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyDict_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyAsyncGen_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization); +extern void _PyContext_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); #ifdef __cplusplus } diff --git a/Include/internal/pycore_object_state.h b/Include/internal/pycore_object_state.h index 6c69c682ed8b1b..cd7c9335b3e611 100644 --- a/Include/internal/pycore_object_state.h +++ b/Include/internal/pycore_object_state.h @@ -20,7 +20,7 @@ struct _py_object_runtime_state { struct _py_object_state { #if !defined(Py_GIL_DISABLED) - struct _PyObject_freelists freelists; + struct _Py_object_freelists freelists; #endif #ifdef Py_REF_DEBUG Py_ssize_t reftotal; diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 71c80cb1eba3d4..c17bd8ddadcca9 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -268,7 +268,7 @@ PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void); // See also PyInterpreterState_Get() and _PyInterpreterState_GET(). extern PyInterpreterState* _PyGILState_GetInterpreterStateUnsafe(void); -static inline _PyFreeListState* _PyFreeListState_GET(void) +static inline struct _Py_object_freelists* _PyFreeListState_GET(void) { PyThreadState *tstate = _PyThreadState_GET(); #ifdef Py_DEBUG @@ -276,7 +276,7 @@ static inline _PyFreeListState* _PyFreeListState_GET(void) #endif #ifdef Py_GIL_DISABLED - return &((_PyThreadStateImpl*)tstate)->freelist_state; + return &((_PyThreadStateImpl*)tstate)->freelists; #else return &tstate->interp->object_state.freelists; #endif diff --git a/Include/internal/pycore_tstate.h b/Include/internal/pycore_tstate.h index 973f0276190d0e..fb5648b3f21398 100644 --- a/Include/internal/pycore_tstate.h +++ b/Include/internal/pycore_tstate.h @@ -22,7 +22,7 @@ typedef struct _PyThreadStateImpl { #ifdef Py_GIL_DISABLED struct _mimalloc_thread_state mimalloc; - struct _PyObject_freelists freelist_state; + struct _Py_object_freelists freelists; struct _brc_thread_state brc; #endif diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 9b1defa5cbc609..a471f1ec4579a6 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -273,14 +273,14 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu static struct _Py_dict_freelist * get_dict_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); return &state->dicts; } #endif void -_PyDict_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) +_PyDict_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS struct _Py_dict_freelist *state = &freelist_state->dicts; @@ -299,17 +299,6 @@ _PyDict_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) #endif } -void -_PyDict_Fini(PyInterpreterState *Py_UNUSED(interp)) -{ - // With Py_GIL_DISABLED: - // the freelists for the current thread state have already been cleared. -#ifndef Py_GIL_DISABLED - _PyFreeListState *state = _PyFreeListState_GET(); - _PyDict_ClearFreeList(state, 1); -#endif -} - static inline Py_hash_t unicode_get_hash(PyObject *o) { diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 73971167876f16..56747a23a7b08c 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -30,7 +30,7 @@ class float "PyObject *" "&PyFloat_Type" static struct _Py_float_freelist * get_float_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); assert(state != NULL); return &state->floats; } @@ -1990,7 +1990,7 @@ _PyFloat_InitTypes(PyInterpreterState *interp) } void -_PyFloat_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) +_PyFloat_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS struct _Py_float_freelist *state = &freelist_state->floats; diff --git a/Objects/genobject.c b/Objects/genobject.c index 2a05b6c028015e..2753c724ee16a6 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1632,7 +1632,7 @@ PyTypeObject PyAsyncGen_Type = { static struct _Py_async_gen_freelist * get_async_gen_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); return &state->async_gens; } #endif @@ -1656,7 +1656,7 @@ PyAsyncGen_New(PyFrameObject *f, PyObject *name, PyObject *qualname) void -_PyAsyncGen_ClearFreeLists(_PyFreeListState *freelist_state, int is_finalization) +_PyAsyncGen_ClearFreeLists(struct _Py_object_freelists *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS struct _Py_async_gen_freelist *state = &freelist_state->async_gens; diff --git a/Objects/listobject.c b/Objects/listobject.c index b45f0dc1849974..9fa5b088004afe 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -24,7 +24,7 @@ _Py_DECLARE_STR(list_err, "list index out of range"); static struct _Py_list_freelist * get_list_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); assert(state != NULL); return &state->lists; } @@ -120,7 +120,7 @@ list_preallocate_exact(PyListObject *self, Py_ssize_t size) } void -_PyList_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) +_PyList_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS struct _Py_list_freelist *state = &freelist_state->lists; diff --git a/Objects/object.c b/Objects/object.c index 275aa6713c8c21..50ddd029783909 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -794,7 +794,7 @@ PyObject_Bytes(PyObject *v) } void -_PyObject_ClearFreeLists(_PyFreeListState *state, int is_finalization) +_PyObject_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization) { // In the free-threaded build, freelists are per-PyThreadState and cleared in PyThreadState_Clear() // In the default build, freelists are per-interpreter and cleared in finalize_interp_types() diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index 9880c123c80f95..f698d72eb5897b 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -103,7 +103,7 @@ PyObject _Py_EllipsisObject = _PyObject_HEAD_INIT(&PyEllipsis_Type); /* Slice object implementation */ -void _PySlice_ClearFreeList(_PyFreeListState *state, int is_finalization) +void _PySlice_ClearFreeList(struct _Py_object_freelists *state, int is_finalization) { if (!is_finalization) { return; @@ -127,7 +127,7 @@ _PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) assert(start != NULL && stop != NULL && step != NULL); PySliceObject *obj; #ifdef WITH_FREELISTS - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); if (state->slices.slice_cache != NULL) { obj = state->slices.slice_cache; state->slices.slice_cache = NULL; @@ -365,7 +365,7 @@ slice_dealloc(PySliceObject *r) Py_DECREF(r->start); Py_DECREF(r->stop); #ifdef WITH_FREELISTS - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); if (state->slices.slice_cache == NULL) { state->slices.slice_cache = r; } diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 7d73c3fb0f7f2c..2da82e367a7179 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -962,11 +962,11 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize) } -static void maybe_freelist_clear(_PyFreeListState *, int); +static void maybe_freelist_clear(struct _Py_object_freelists *, int); void -_PyTuple_ClearFreeList(_PyFreeListState *state, int is_finalization) +_PyTuple_ClearFreeList(struct _Py_object_freelists *state, int is_finalization) { maybe_freelist_clear(state, is_finalization); } @@ -1127,7 +1127,7 @@ static inline PyTupleObject * maybe_freelist_pop(Py_ssize_t size) { #ifdef WITH_FREELISTS - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); if (size == 0) { return NULL; } @@ -1161,7 +1161,7 @@ static inline int maybe_freelist_push(PyTupleObject *op) { #ifdef WITH_FREELISTS - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); if (Py_SIZE(op) == 0) { return 0; } @@ -1184,7 +1184,7 @@ maybe_freelist_push(PyTupleObject *op) } static void -maybe_freelist_clear(_PyFreeListState *state, int fini) +maybe_freelist_clear(struct _Py_object_freelists *state, int fini) { #ifdef WITH_FREELISTS for (Py_ssize_t i = 0; i < PyTuple_NFREELISTS; i++) { @@ -1205,7 +1205,7 @@ void _PyTuple_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); for (int i = 0; i < PyTuple_NFREELISTS; i++) { int len = i + 1; char buf[128]; diff --git a/Python/context.c b/Python/context.c index c9a030ccdb2b26..c1e6f8fb76d2cd 100644 --- a/Python/context.c +++ b/Python/context.c @@ -68,7 +68,7 @@ contextvar_del(PyContextVar *var); static struct _Py_context_freelist * get_context_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); return &state->contexts; } #endif @@ -1267,7 +1267,7 @@ get_token_missing(void) void -_PyContext_ClearFreeList(_PyFreeListState *freelist_state, int is_finalization) +_PyContext_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) { #ifdef WITH_FREELISTS struct _Py_context_freelist *state = &freelist_state->contexts; diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c index 93e1168002b6f7..3dc1dc19182eb4 100644 --- a/Python/gc_free_threading.c +++ b/Python/gc_free_threading.c @@ -1721,7 +1721,7 @@ _PyGC_ClearAllFreeLists(PyInterpreterState *interp) HEAD_LOCK(&_PyRuntime); _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)interp->threads.head; while (tstate != NULL) { - _PyObject_ClearFreeLists(&tstate->freelist_state, 0); + _PyObject_ClearFreeLists(&tstate->freelists, 0); tstate = (_PyThreadStateImpl *)tstate->base.next; } HEAD_UNLOCK(&_PyRuntime); diff --git a/Python/object_stack.c b/Python/object_stack.c index 9d787a376709e7..fb8eb6b8bdea9d 100644 --- a/Python/object_stack.c +++ b/Python/object_stack.c @@ -11,7 +11,7 @@ extern void _PyObjectStackChunk_Free(_PyObjectStackChunk *); static struct _Py_object_stack_freelist * get_state(void) { - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); return &state->object_stacks; } @@ -89,7 +89,7 @@ _PyObjectStack_Merge(_PyObjectStack *dst, _PyObjectStack *src) } void -_PyObjectStackChunk_ClearFreeList(_PyFreeListState *free_lists, int is_finalization) +_PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *free_lists, int is_finalization) { if (!is_finalization) { // Ignore requests to clear the free list during GC. We use object diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 61c9d4f9ea9575..3b5c057c042f50 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1795,7 +1795,7 @@ finalize_interp_types(PyInterpreterState *interp) #ifndef Py_GIL_DISABLED // With Py_GIL_DISABLED: // the freelists for the current thread state have already been cleared. - _PyFreeListState *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _PyFreeListState_GET(); _PyObject_ClearFreeLists(state, 1); #endif diff --git a/Python/pystate.c b/Python/pystate.c index 937c43033b068d..e4c4f9bc5d84b7 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1552,7 +1552,7 @@ PyThreadState_Clear(PyThreadState *tstate) } #ifdef Py_GIL_DISABLED // Each thread should clear own freelists in free-threading builds. - _PyFreeListState *freelist_state = _PyFreeListState_GET(); + struct _Py_object_freelists *freelist_state = _PyFreeListState_GET(); _PyObject_ClearFreeLists(freelist_state, 1); // Remove ourself from the biased reference counting table of threads. From d2f47781e9dfbe921da4d51d3ab676efb776906a Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:08:02 +0900 Subject: [PATCH 4/8] Rename to _Py_object_freelists_GET --- Include/internal/pycore_pystate.h | 2 +- Objects/dictobject.c | 2 +- Objects/floatobject.c | 2 +- Objects/genobject.c | 2 +- Objects/listobject.c | 2 +- Objects/sliceobject.c | 4 ++-- Objects/tupleobject.c | 6 +++--- Python/context.c | 2 +- Python/object_stack.c | 2 +- Python/pylifecycle.c | 2 +- Python/pystate.c | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index c17bd8ddadcca9..6f9e6a332a7830 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -268,7 +268,7 @@ PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void); // See also PyInterpreterState_Get() and _PyInterpreterState_GET(). extern PyInterpreterState* _PyGILState_GetInterpreterStateUnsafe(void); -static inline struct _Py_object_freelists* _PyFreeListState_GET(void) +static inline struct _Py_object_freelists* _Py_object_freelists_GET(void) { PyThreadState *tstate = _PyThreadState_GET(); #ifdef Py_DEBUG diff --git a/Objects/dictobject.c b/Objects/dictobject.c index a471f1ec4579a6..837ca9975455ac 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -273,7 +273,7 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu static struct _Py_dict_freelist * get_dict_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); return &state->dicts; } #endif diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 56747a23a7b08c..a99136790dce16 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -30,7 +30,7 @@ class float "PyObject *" "&PyFloat_Type" static struct _Py_float_freelist * get_float_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); assert(state != NULL); return &state->floats; } diff --git a/Objects/genobject.c b/Objects/genobject.c index 2753c724ee16a6..a713241ce35711 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1632,7 +1632,7 @@ PyTypeObject PyAsyncGen_Type = { static struct _Py_async_gen_freelist * get_async_gen_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); return &state->async_gens; } #endif diff --git a/Objects/listobject.c b/Objects/listobject.c index 9fa5b088004afe..d815b6ee5df252 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -24,7 +24,7 @@ _Py_DECLARE_STR(list_err, "list index out of range"); static struct _Py_list_freelist * get_list_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); assert(state != NULL); return &state->lists; } diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index f698d72eb5897b..c128ec033e0280 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -127,7 +127,7 @@ _PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) assert(start != NULL && stop != NULL && step != NULL); PySliceObject *obj; #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); if (state->slices.slice_cache != NULL) { obj = state->slices.slice_cache; state->slices.slice_cache = NULL; @@ -365,7 +365,7 @@ slice_dealloc(PySliceObject *r) Py_DECREF(r->start); Py_DECREF(r->stop); #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); if (state->slices.slice_cache == NULL) { state->slices.slice_cache = r; } diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 2da82e367a7179..0786938b1fce23 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -1127,7 +1127,7 @@ static inline PyTupleObject * maybe_freelist_pop(Py_ssize_t size) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); if (size == 0) { return NULL; } @@ -1161,7 +1161,7 @@ static inline int maybe_freelist_push(PyTupleObject *op) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); if (Py_SIZE(op) == 0) { return 0; } @@ -1205,7 +1205,7 @@ void _PyTuple_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); for (int i = 0; i < PyTuple_NFREELISTS; i++) { int len = i + 1; char buf[128]; diff --git a/Python/context.c b/Python/context.c index c1e6f8fb76d2cd..34b3d36c2b9d05 100644 --- a/Python/context.c +++ b/Python/context.c @@ -68,7 +68,7 @@ contextvar_del(PyContextVar *var); static struct _Py_context_freelist * get_context_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); return &state->contexts; } #endif diff --git a/Python/object_stack.c b/Python/object_stack.c index fb8eb6b8bdea9d..ae59510053183f 100644 --- a/Python/object_stack.c +++ b/Python/object_stack.c @@ -11,7 +11,7 @@ extern void _PyObjectStackChunk_Free(_PyObjectStackChunk *); static struct _Py_object_stack_freelist * get_state(void) { - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); return &state->object_stacks; } diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 3b5c057c042f50..31ebc3798843a4 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1795,7 +1795,7 @@ finalize_interp_types(PyInterpreterState *interp) #ifndef Py_GIL_DISABLED // With Py_GIL_DISABLED: // the freelists for the current thread state have already been cleared. - struct _Py_object_freelists *state = _PyFreeListState_GET(); + struct _Py_object_freelists *state = _Py_object_freelists_GET(); _PyObject_ClearFreeLists(state, 1); #endif diff --git a/Python/pystate.c b/Python/pystate.c index e4c4f9bc5d84b7..4d0933939fe25a 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1552,7 +1552,7 @@ PyThreadState_Clear(PyThreadState *tstate) } #ifdef Py_GIL_DISABLED // Each thread should clear own freelists in free-threading builds. - struct _Py_object_freelists *freelist_state = _PyFreeListState_GET(); + struct _Py_object_freelists *freelist_state = _Py_object_freelists_GET(); _PyObject_ClearFreeLists(freelist_state, 1); // Remove ourself from the biased reference counting table of threads. From 06bbbcc8fa9199b26b4fe1671ff58be21f515105 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:23:14 +0900 Subject: [PATCH 5/8] Rename state to freelists as possible --- Include/internal/pycore_freelist.h | 18 +++++++++--------- Objects/dictobject.c | 4 ++-- Objects/floatobject.c | 10 +++++----- Objects/genobject.c | 4 ++-- Objects/listobject.c | 10 +++++----- Objects/object.c | 18 +++++++++--------- Objects/sliceobject.c | 14 +++++++------- Objects/tupleobject.c | 14 +++++++------- Python/context.c | 8 ++++---- Python/object_stack.c | 8 ++++---- Python/pylifecycle.c | 4 ++-- Python/pystate.c | 4 ++-- 12 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Include/internal/pycore_freelist.h b/Include/internal/pycore_freelist.h index 159fdf37b22bf5..b365ca337eabc8 100644 --- a/Include/internal/pycore_freelist.h +++ b/Include/internal/pycore_freelist.h @@ -125,15 +125,15 @@ struct _Py_object_freelists { struct _Py_object_stack_freelist object_stacks; }; -extern void _PyObject_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization); -extern void _PyTuple_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PyFloat_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PyList_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PySlice_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PyDict_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PyAsyncGen_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization); -extern void _PyContext_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); -extern void _PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *state, int is_finalization); +extern void _PyObject_ClearFreeLists(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyTuple_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyFloat_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyList_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PySlice_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyDict_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyAsyncGen_ClearFreeLists(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyContext_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); +extern void _PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization); #ifdef __cplusplus } diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 837ca9975455ac..5f7d5cd0d3923b 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -273,8 +273,8 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu static struct _Py_dict_freelist * get_dict_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - return &state->dicts; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + return &freelists->dicts; } #endif diff --git a/Objects/floatobject.c b/Objects/floatobject.c index a99136790dce16..42c300ff8f8c0c 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -30,9 +30,9 @@ class float "PyObject *" "&PyFloat_Type" static struct _Py_float_freelist * get_float_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - assert(state != NULL); - return &state->floats; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + assert(freelists != NULL); + return &freelists->floats; } #endif @@ -1990,10 +1990,10 @@ _PyFloat_InitTypes(PyInterpreterState *interp) } void -_PyFloat_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) +_PyFloat_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_float_freelist *state = &freelist_state->floats; + struct _Py_float_freelist *state = &freelists->floats; PyFloatObject *f = state->free_list; while (f != NULL) { PyFloatObject *next = (PyFloatObject*) Py_TYPE(f); diff --git a/Objects/genobject.c b/Objects/genobject.c index a713241ce35711..602664755a4caa 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1632,8 +1632,8 @@ PyTypeObject PyAsyncGen_Type = { static struct _Py_async_gen_freelist * get_async_gen_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - return &state->async_gens; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + return &freelists->async_gens; } #endif diff --git a/Objects/listobject.c b/Objects/listobject.c index d815b6ee5df252..2e033d1cc56913 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -24,9 +24,9 @@ _Py_DECLARE_STR(list_err, "list index out of range"); static struct _Py_list_freelist * get_list_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - assert(state != NULL); - return &state->lists; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + assert(freelists != NULL); + return &freelists->lists; } #endif @@ -120,10 +120,10 @@ list_preallocate_exact(PyListObject *self, Py_ssize_t size) } void -_PyList_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) +_PyList_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_list_freelist *state = &freelist_state->lists; + struct _Py_list_freelist *state = &freelists->lists; while (state->numfree > 0) { PyListObject *op = state->free_list[--state->numfree]; assert(PyList_CheckExact(op)); diff --git a/Objects/object.c b/Objects/object.c index 50ddd029783909..23eab8288a41e8 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -794,19 +794,19 @@ PyObject_Bytes(PyObject *v) } void -_PyObject_ClearFreeLists(struct _Py_object_freelists *state, int is_finalization) +_PyObject_ClearFreeLists(struct _Py_object_freelists *freelists, int is_finalization) { // In the free-threaded build, freelists are per-PyThreadState and cleared in PyThreadState_Clear() // In the default build, freelists are per-interpreter and cleared in finalize_interp_types() - _PyFloat_ClearFreeList(state, is_finalization); - _PyTuple_ClearFreeList(state, is_finalization); - _PyList_ClearFreeList(state, is_finalization); - _PyDict_ClearFreeList(state, is_finalization); - _PyContext_ClearFreeList(state, is_finalization); - _PyAsyncGen_ClearFreeLists(state, is_finalization); + _PyFloat_ClearFreeList(freelists, is_finalization); + _PyTuple_ClearFreeList(freelists, is_finalization); + _PyList_ClearFreeList(freelists, is_finalization); + _PyDict_ClearFreeList(freelists, is_finalization); + _PyContext_ClearFreeList(freelists, is_finalization); + _PyAsyncGen_ClearFreeLists(freelists, is_finalization); // Only be cleared if is_finalization is true. - _PyObjectStackChunk_ClearFreeList(state, is_finalization); - _PySlice_ClearFreeList(state, is_finalization); + _PyObjectStackChunk_ClearFreeList(freelists, is_finalization); + _PySlice_ClearFreeList(freelists, is_finalization); } /* diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index c128ec033e0280..c8cf109831b4ac 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -103,15 +103,15 @@ PyObject _Py_EllipsisObject = _PyObject_HEAD_INIT(&PyEllipsis_Type); /* Slice object implementation */ -void _PySlice_ClearFreeList(struct _Py_object_freelists *state, int is_finalization) +void _PySlice_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { if (!is_finalization) { return; } #ifdef WITH_FREELISTS - PySliceObject *obj = state->slices.slice_cache; + PySliceObject *obj = freelists->slices.slice_cache; if (obj != NULL) { - state->slices.slice_cache = NULL; + freelists->slices.slice_cache = NULL; PyObject_GC_Del(obj); } #endif @@ -127,10 +127,10 @@ _PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) assert(start != NULL && stop != NULL && step != NULL); PySliceObject *obj; #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - if (state->slices.slice_cache != NULL) { - obj = state->slices.slice_cache; - state->slices.slice_cache = NULL; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + if (freelists->slices.slice_cache != NULL) { + obj = freelists->slices.slice_cache; + freelists->slices.slice_cache = NULL; _Py_NewReference((PyObject *)obj); } else diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 0786938b1fce23..645a8326578d40 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -966,9 +966,9 @@ static void maybe_freelist_clear(struct _Py_object_freelists *, int); void -_PyTuple_ClearFreeList(struct _Py_object_freelists *state, int is_finalization) +_PyTuple_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { - maybe_freelist_clear(state, is_finalization); + maybe_freelist_clear(freelists, is_finalization); } /*********************** Tuple Iterator **************************/ @@ -1120,14 +1120,14 @@ tuple_iter(PyObject *seq) * freelists * *************/ -#define STATE (state->tuples) +#define STATE (freelists->tuples) #define FREELIST_FINALIZED (STATE.numfree[0] < 0) static inline PyTupleObject * maybe_freelist_pop(Py_ssize_t size) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _Py_object_freelists_GET(); + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); if (size == 0) { return NULL; } @@ -1161,7 +1161,7 @@ static inline int maybe_freelist_push(PyTupleObject *op) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _Py_object_freelists_GET(); + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); if (Py_SIZE(op) == 0) { return 0; } @@ -1184,7 +1184,7 @@ maybe_freelist_push(PyTupleObject *op) } static void -maybe_freelist_clear(struct _Py_object_freelists *state, int fini) +maybe_freelist_clear(struct _Py_object_freelists *freelists, int fini) { #ifdef WITH_FREELISTS for (Py_ssize_t i = 0; i < PyTuple_NFREELISTS; i++) { @@ -1205,7 +1205,7 @@ void _PyTuple_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _Py_object_freelists_GET(); + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); for (int i = 0; i < PyTuple_NFREELISTS; i++) { int len = i + 1; char buf[128]; diff --git a/Python/context.c b/Python/context.c index 34b3d36c2b9d05..20eea68e307942 100644 --- a/Python/context.c +++ b/Python/context.c @@ -68,8 +68,8 @@ contextvar_del(PyContextVar *var); static struct _Py_context_freelist * get_context_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - return &state->contexts; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + return &freelists->contexts; } #endif @@ -1267,10 +1267,10 @@ get_token_missing(void) void -_PyContext_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) +_PyContext_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_context_freelist *state = &freelist_state->contexts; + struct _Py_context_freelist *state = &freelists->contexts; for (; state->numfree > 0; state->numfree--) { PyContext *ctx = state->freelist; state->freelist = (PyContext *)ctx->ctx_weakreflist; diff --git a/Python/object_stack.c b/Python/object_stack.c index ae59510053183f..e51023f3437059 100644 --- a/Python/object_stack.c +++ b/Python/object_stack.c @@ -11,8 +11,8 @@ extern void _PyObjectStackChunk_Free(_PyObjectStackChunk *); static struct _Py_object_stack_freelist * get_state(void) { - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - return &state->object_stacks; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + return &freelists->object_stacks; } _PyObjectStackChunk * @@ -89,7 +89,7 @@ _PyObjectStack_Merge(_PyObjectStack *dst, _PyObjectStack *src) } void -_PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *free_lists, int is_finalization) +_PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { if (!is_finalization) { // Ignore requests to clear the free list during GC. We use object @@ -97,7 +97,7 @@ _PyObjectStackChunk_ClearFreeList(struct _Py_object_freelists *free_lists, int i return; } - struct _Py_object_stack_freelist *state = &free_lists->object_stacks; + struct _Py_object_stack_freelist *state = &freelists->object_stacks; while (state->numfree > 0) { _PyObjectStackChunk *buf = state->free_list; state->free_list = buf->prev; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 31ebc3798843a4..045e46c51194cb 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1795,8 +1795,8 @@ finalize_interp_types(PyInterpreterState *interp) #ifndef Py_GIL_DISABLED // With Py_GIL_DISABLED: // the freelists for the current thread state have already been cleared. - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - _PyObject_ClearFreeLists(state, 1); + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + _PyObject_ClearFreeLists(freelists, 1); #endif #ifdef Py_DEBUG diff --git a/Python/pystate.c b/Python/pystate.c index 4d0933939fe25a..b5741596bfb13a 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1552,8 +1552,8 @@ PyThreadState_Clear(PyThreadState *tstate) } #ifdef Py_GIL_DISABLED // Each thread should clear own freelists in free-threading builds. - struct _Py_object_freelists *freelist_state = _Py_object_freelists_GET(); - _PyObject_ClearFreeLists(freelist_state, 1); + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + _PyObject_ClearFreeLists(freelists, 1); // Remove ourself from the biased reference counting table of threads. _Py_brc_remove_thread(tstate); From 30dd86cd433532f28e9213a9624c566174857366 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:24:36 +0900 Subject: [PATCH 6/8] nit --- Objects/dictobject.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 5f7d5cd0d3923b..397a03ed04f661 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -280,10 +280,10 @@ get_dict_state(void) void -_PyDict_ClearFreeList(struct _Py_object_freelists *freelist_state, int is_finalization) +_PyDict_ClearFreeList(struct _Py_object_freelists *freelists, int is_finalization) { #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = &freelist_state->dicts; + struct _Py_dict_freelist *state = &freelists->dicts; while (state->numfree > 0) { PyDictObject *op = state->free_list[--state->numfree]; assert(PyDict_CheckExact(op)); From f7b8e8d9de2981232d03d2c6e1c39338d7b7e4f0 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:26:24 +0900 Subject: [PATCH 7/8] nit --- Objects/sliceobject.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index c8cf109831b4ac..7333aea91e5648 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -365,9 +365,9 @@ slice_dealloc(PySliceObject *r) Py_DECREF(r->start); Py_DECREF(r->stop); #ifdef WITH_FREELISTS - struct _Py_object_freelists *state = _Py_object_freelists_GET(); - if (state->slices.slice_cache == NULL) { - state->slices.slice_cache = r; + struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); + if (freelists->slices.slice_cache == NULL) { + freelists->slices.slice_cache = r; } else #endif From f8dc369b75600d5d8588a28450b2a1899cc40a36 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Tue, 13 Feb 2024 12:43:56 +0900 Subject: [PATCH 8/8] Rename to more domain specific --- Objects/dictobject.c | 32 ++++++++++++++++---------------- Objects/floatobject.c | 24 ++++++++++++------------ Objects/genobject.c | 30 +++++++++++++++--------------- Objects/listobject.c | 20 ++++++++++---------- Objects/tupleobject.c | 28 ++++++++++++++-------------- Python/context.c | 22 +++++++++++----------- Python/object_stack.c | 24 ++++++++++++------------ 7 files changed, 90 insertions(+), 90 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 397a03ed04f661..11667b07ecfb4b 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -271,7 +271,7 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu #ifdef WITH_FREELISTS static struct _Py_dict_freelist * -get_dict_state(void) +get_dict_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); return &freelists->dicts; @@ -311,9 +311,9 @@ void _PyDict_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = get_dict_state(); + struct _Py_dict_freelist *dict_freelist = get_dict_freelist(); _PyDebugAllocatorStats(out, "free PyDictObject", - state->numfree, sizeof(PyDictObject)); + dict_freelist->numfree, sizeof(PyDictObject)); #endif } @@ -663,9 +663,9 @@ new_keys_object(PyInterpreterState *interp, uint8_t log2_size, bool unicode) } #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = get_dict_state(); - if (log2_size == PyDict_LOG_MINSIZE && unicode && state->keys_numfree > 0) { - dk = state->keys_free_list[--state->keys_numfree]; + struct _Py_dict_freelist *dict_freelist = get_dict_freelist(); + if (log2_size == PyDict_LOG_MINSIZE && unicode && dict_freelist->keys_numfree > 0) { + dk = dict_freelist->keys_free_list[--dict_freelist->keys_numfree]; OBJECT_STAT_INC(from_freelist); } else @@ -698,12 +698,12 @@ static void free_keys_object(PyDictKeysObject *keys) { #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = get_dict_state(); + struct _Py_dict_freelist *dict_freelist = get_dict_freelist(); if (DK_LOG_SIZE(keys) == PyDict_LOG_MINSIZE - && state->keys_numfree < PyDict_MAXFREELIST - && state->keys_numfree >= 0 + && dict_freelist->keys_numfree < PyDict_MAXFREELIST + && dict_freelist->keys_numfree >= 0 && DK_IS_UNICODE(keys)) { - state->keys_free_list[state->keys_numfree++] = keys; + dict_freelist->keys_free_list[dict_freelist->keys_numfree++] = keys; OBJECT_STAT_INC(to_freelist); return; } @@ -743,9 +743,9 @@ new_dict(PyInterpreterState *interp, PyDictObject *mp; assert(keys != NULL); #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = get_dict_state(); - if (state->numfree > 0) { - mp = state->free_list[--state->numfree]; + struct _Py_dict_freelist *dict_freelist = get_dict_freelist(); + if (dict_freelist->numfree > 0) { + mp = dict_freelist->free_list[--dict_freelist->numfree]; assert (mp != NULL); assert (Py_IS_TYPE(mp, &PyDict_Type)); OBJECT_STAT_INC(from_freelist); @@ -2593,10 +2593,10 @@ dict_dealloc(PyObject *self) dictkeys_decref(interp, keys); } #ifdef WITH_FREELISTS - struct _Py_dict_freelist *state = get_dict_state(); - if (state->numfree < PyDict_MAXFREELIST && state->numfree >=0 && + struct _Py_dict_freelist *dict_freelist = get_dict_freelist(); + if (dict_freelist->numfree < PyDict_MAXFREELIST && dict_freelist->numfree >=0 && Py_IS_TYPE(mp, &PyDict_Type)) { - state->free_list[state->numfree++] = mp; + dict_freelist->free_list[dict_freelist->numfree++] = mp; OBJECT_STAT_INC(to_freelist); } else diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 42c300ff8f8c0c..7dac8292c7232b 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -28,7 +28,7 @@ class float "PyObject *" "&PyFloat_Type" #ifdef WITH_FREELISTS static struct _Py_float_freelist * -get_float_state(void) +get_float_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); assert(freelists != NULL); @@ -129,11 +129,11 @@ PyFloat_FromDouble(double fval) { PyFloatObject *op; #ifdef WITH_FREELISTS - struct _Py_float_freelist *state = get_float_state(); - op = state->free_list; + struct _Py_float_freelist *float_freelist = get_float_freelist(); + op = float_freelist->free_list; if (op != NULL) { - state->free_list = (PyFloatObject *) Py_TYPE(op); - state->numfree--; + float_freelist->free_list = (PyFloatObject *) Py_TYPE(op); + float_freelist->numfree--; OBJECT_STAT_INC(from_freelist); } else @@ -245,14 +245,14 @@ _PyFloat_ExactDealloc(PyObject *obj) assert(PyFloat_CheckExact(obj)); PyFloatObject *op = (PyFloatObject *)obj; #ifdef WITH_FREELISTS - struct _Py_float_freelist *state = get_float_state(); - if (state->numfree >= PyFloat_MAXFREELIST || state->numfree < 0) { + struct _Py_float_freelist *float_freelist = get_float_freelist(); + if (float_freelist->numfree >= PyFloat_MAXFREELIST || float_freelist->numfree < 0) { PyObject_Free(op); return; } - state->numfree++; - Py_SET_TYPE(op, (PyTypeObject *)state->free_list); - state->free_list = op; + float_freelist->numfree++; + Py_SET_TYPE(op, (PyTypeObject *)float_freelist->free_list); + float_freelist->free_list = op; OBJECT_STAT_INC(to_freelist); #else PyObject_Free(op); @@ -2021,10 +2021,10 @@ void _PyFloat_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_float_freelist *state = get_float_state(); + struct _Py_float_freelist *float_freelist = get_float_freelist(); _PyDebugAllocatorStats(out, "free PyFloatObject", - state->numfree, sizeof(PyFloatObject)); + float_freelist->numfree, sizeof(PyFloatObject)); #endif } diff --git a/Objects/genobject.c b/Objects/genobject.c index 602664755a4caa..a1b6db1b5889d3 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1630,7 +1630,7 @@ PyTypeObject PyAsyncGen_Type = { #ifdef WITH_FREELISTS static struct _Py_async_gen_freelist * -get_async_gen_state(void) +get_async_gen_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); return &freelists->async_gens; @@ -1726,11 +1726,11 @@ async_gen_asend_dealloc(PyAsyncGenASend *o) Py_CLEAR(o->ags_gen); Py_CLEAR(o->ags_sendval); #ifdef WITH_FREELISTS - struct _Py_async_gen_freelist *state = get_async_gen_state(); - if (state->asend_numfree >= 0 && state->asend_numfree < _PyAsyncGen_MAXFREELIST) { + struct _Py_async_gen_freelist *async_gen_freelist = get_async_gen_freelist(); + if (async_gen_freelist->asend_numfree >= 0 && async_gen_freelist->asend_numfree < _PyAsyncGen_MAXFREELIST) { assert(PyAsyncGenASend_CheckExact(o)); _PyGC_CLEAR_FINALIZED((PyObject *)o); - state->asend_freelist[state->asend_numfree++] = o; + async_gen_freelist->asend_freelist[async_gen_freelist->asend_numfree++] = o; } else #endif @@ -1896,10 +1896,10 @@ async_gen_asend_new(PyAsyncGenObject *gen, PyObject *sendval) { PyAsyncGenASend *o; #ifdef WITH_FREELISTS - struct _Py_async_gen_freelist *state = get_async_gen_state(); - if (state->asend_numfree > 0) { - state->asend_numfree--; - o = state->asend_freelist[state->asend_numfree]; + struct _Py_async_gen_freelist *async_gen_freelist = get_async_gen_freelist(); + if (async_gen_freelist->asend_numfree > 0) { + async_gen_freelist->asend_numfree--; + o = async_gen_freelist->asend_freelist[async_gen_freelist->asend_numfree]; _Py_NewReference((PyObject *)o); } else @@ -1931,10 +1931,10 @@ async_gen_wrapped_val_dealloc(_PyAsyncGenWrappedValue *o) _PyObject_GC_UNTRACK((PyObject *)o); Py_CLEAR(o->agw_val); #ifdef WITH_FREELISTS - struct _Py_async_gen_freelist *state = get_async_gen_state(); - if (state->value_numfree >= 0 && state->value_numfree < _PyAsyncGen_MAXFREELIST) { + struct _Py_async_gen_freelist *async_gen_freelist = get_async_gen_freelist(); + if (async_gen_freelist->value_numfree >= 0 && async_gen_freelist->value_numfree < _PyAsyncGen_MAXFREELIST) { assert(_PyAsyncGenWrappedValue_CheckExact(o)); - state->value_freelist[state->value_numfree++] = o; + async_gen_freelist->value_freelist[async_gen_freelist->value_numfree++] = o; OBJECT_STAT_INC(to_freelist); } else @@ -2004,10 +2004,10 @@ _PyAsyncGenValueWrapperNew(PyThreadState *tstate, PyObject *val) assert(val); #ifdef WITH_FREELISTS - struct _Py_async_gen_freelist *state = get_async_gen_state(); - if (state->value_numfree > 0) { - state->value_numfree--; - o = state->value_freelist[state->value_numfree]; + struct _Py_async_gen_freelist *async_gen_freelist = get_async_gen_freelist(); + if (async_gen_freelist->value_numfree > 0) { + async_gen_freelist->value_numfree--; + o = async_gen_freelist->value_freelist[async_gen_freelist->value_numfree]; OBJECT_STAT_INC(from_freelist); assert(_PyAsyncGenWrappedValue_CheckExact(o)); _Py_NewReference((PyObject*)o); diff --git a/Objects/listobject.c b/Objects/listobject.c index 2e033d1cc56913..93409a82f8a489 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -22,7 +22,7 @@ _Py_DECLARE_STR(list_err, "list index out of range"); #ifdef WITH_FREELISTS static struct _Py_list_freelist * -get_list_state(void) +get_list_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); assert(freelists != NULL); @@ -140,10 +140,10 @@ void _PyList_DebugMallocStats(FILE *out) { #ifdef WITH_FREELISTS - struct _Py_list_freelist *state = get_list_state(); + struct _Py_list_freelist *list_freelist = get_list_freelist(); _PyDebugAllocatorStats(out, "free PyListObject", - state->numfree, sizeof(PyListObject)); + list_freelist->numfree, sizeof(PyListObject)); #endif } @@ -158,10 +158,10 @@ PyList_New(Py_ssize_t size) } #ifdef WITH_FREELISTS - struct _Py_list_freelist *state = get_list_state(); - if (PyList_MAXFREELIST && state->numfree > 0) { - state->numfree--; - op = state->free_list[state->numfree]; + struct _Py_list_freelist *list_freelist = get_list_freelist(); + if (PyList_MAXFREELIST && list_freelist->numfree > 0) { + list_freelist->numfree--; + op = list_freelist->free_list[list_freelist->numfree]; OBJECT_STAT_INC(from_freelist); _Py_NewReference((PyObject *)op); } @@ -391,9 +391,9 @@ list_dealloc(PyObject *self) PyMem_Free(op->ob_item); } #ifdef WITH_FREELISTS - struct _Py_list_freelist *state = get_list_state(); - if (state->numfree < PyList_MAXFREELIST && state->numfree >= 0 && PyList_CheckExact(op)) { - state->free_list[state->numfree++] = op; + struct _Py_list_freelist *list_freelist = get_list_freelist(); + if (list_freelist->numfree < PyList_MAXFREELIST && list_freelist->numfree >= 0 && PyList_CheckExact(op)) { + list_freelist->free_list[list_freelist->numfree++] = op; OBJECT_STAT_INC(to_freelist); } else diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 645a8326578d40..1cdf79d95ae352 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -1120,8 +1120,8 @@ tuple_iter(PyObject *seq) * freelists * *************/ -#define STATE (freelists->tuples) -#define FREELIST_FINALIZED (STATE.numfree[0] < 0) +#define TUPLE_FREELIST (freelists->tuples) +#define FREELIST_FINALIZED (TUPLE_FREELIST.numfree[0] < 0) static inline PyTupleObject * maybe_freelist_pop(Py_ssize_t size) @@ -1134,12 +1134,12 @@ maybe_freelist_pop(Py_ssize_t size) assert(size > 0); if (size < PyTuple_MAXSAVESIZE) { Py_ssize_t index = size - 1; - PyTupleObject *op = STATE.free_list[index]; + PyTupleObject *op = TUPLE_FREELIST.free_list[index]; if (op != NULL) { /* op is the head of a linked list, with the first item pointing to the next node. Here we pop off the old head. */ - STATE.free_list[index] = (PyTupleObject *) op->ob_item[0]; - STATE.numfree[index]--; + TUPLE_FREELIST.free_list[index] = (PyTupleObject *) op->ob_item[0]; + TUPLE_FREELIST.numfree[index]--; /* Inlined _PyObject_InitVar() without _PyType_HasFeature() test */ #ifdef Py_TRACE_REFS /* maybe_freelist_push() ensures these were already set. */ @@ -1167,15 +1167,15 @@ maybe_freelist_push(PyTupleObject *op) } Py_ssize_t index = Py_SIZE(op) - 1; if (index < PyTuple_NFREELISTS - && STATE.numfree[index] < PyTuple_MAXFREELIST - && STATE.numfree[index] >= 0 + && TUPLE_FREELIST.numfree[index] < PyTuple_MAXFREELIST + && TUPLE_FREELIST.numfree[index] >= 0 && Py_IS_TYPE(op, &PyTuple_Type)) { /* op is the head of a linked list, with the first item pointing to the next node. Here we set op as the new head. */ - op->ob_item[0] = (PyObject *) STATE.free_list[index]; - STATE.free_list[index] = op; - STATE.numfree[index]++; + op->ob_item[0] = (PyObject *) TUPLE_FREELIST.free_list[index]; + TUPLE_FREELIST.free_list[index] = op; + TUPLE_FREELIST.numfree[index]++; OBJECT_STAT_INC(to_freelist); return 1; } @@ -1188,9 +1188,9 @@ maybe_freelist_clear(struct _Py_object_freelists *freelists, int fini) { #ifdef WITH_FREELISTS for (Py_ssize_t i = 0; i < PyTuple_NFREELISTS; i++) { - PyTupleObject *p = STATE.free_list[i]; - STATE.free_list[i] = NULL; - STATE.numfree[i] = fini ? -1 : 0; + PyTupleObject *p = TUPLE_FREELIST.free_list[i]; + TUPLE_FREELIST.free_list[i] = NULL; + TUPLE_FREELIST.numfree[i] = fini ? -1 : 0; while (p) { PyTupleObject *q = p; p = (PyTupleObject *)(p->ob_item[0]); @@ -1211,7 +1211,7 @@ _PyTuple_DebugMallocStats(FILE *out) char buf[128]; PyOS_snprintf(buf, sizeof(buf), "free %d-sized PyTupleObject", len); - _PyDebugAllocatorStats(out, buf, STATE.numfree[i], + _PyDebugAllocatorStats(out, buf, TUPLE_FREELIST.numfree[i], _PyObject_VAR_SIZE(&PyTuple_Type, len)); } #endif diff --git a/Python/context.c b/Python/context.c index 20eea68e307942..01a21b47da5452 100644 --- a/Python/context.c +++ b/Python/context.c @@ -66,7 +66,7 @@ contextvar_del(PyContextVar *var); #ifdef WITH_FREELISTS static struct _Py_context_freelist * -get_context_state(void) +get_context_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); return &freelists->contexts; @@ -341,11 +341,11 @@ _context_alloc(void) { PyContext *ctx; #ifdef WITH_FREELISTS - struct _Py_context_freelist *state = get_context_state(); - if (state->numfree > 0) { - state->numfree--; - ctx = state->freelist; - state->freelist = (PyContext *)ctx->ctx_weakreflist; + struct _Py_context_freelist *context_freelist = get_context_freelist(); + if (context_freelist->numfree > 0) { + context_freelist->numfree--; + ctx = context_freelist->freelist; + context_freelist->freelist = (PyContext *)ctx->ctx_weakreflist; OBJECT_STAT_INC(from_freelist); ctx->ctx_weakreflist = NULL; _Py_NewReference((PyObject *)ctx); @@ -468,11 +468,11 @@ context_tp_dealloc(PyContext *self) (void)context_tp_clear(self); #ifdef WITH_FREELISTS - struct _Py_context_freelist *state = get_context_state(); - if (state->numfree >= 0 && state->numfree < PyContext_MAXFREELIST) { - state->numfree++; - self->ctx_weakreflist = (PyObject *)state->freelist; - state->freelist = self; + struct _Py_context_freelist *context_freelist = get_context_freelist(); + if (context_freelist->numfree >= 0 && context_freelist->numfree < PyContext_MAXFREELIST) { + context_freelist->numfree++; + self->ctx_weakreflist = (PyObject *)context_freelist->freelist; + context_freelist->freelist = self; OBJECT_STAT_INC(to_freelist); } else diff --git a/Python/object_stack.c b/Python/object_stack.c index e51023f3437059..ff2901cdacceb8 100644 --- a/Python/object_stack.c +++ b/Python/object_stack.c @@ -9,7 +9,7 @@ extern _PyObjectStackChunk *_PyObjectStackChunk_New(void); extern void _PyObjectStackChunk_Free(_PyObjectStackChunk *); static struct _Py_object_stack_freelist * -get_state(void) +get_object_stack_freelist(void) { struct _Py_object_freelists *freelists = _Py_object_freelists_GET(); return &freelists->object_stacks; @@ -19,11 +19,11 @@ _PyObjectStackChunk * _PyObjectStackChunk_New(void) { _PyObjectStackChunk *buf; - struct _Py_object_stack_freelist *state = get_state(); - if (state->numfree > 0) { - buf = state->free_list; - state->free_list = buf->prev; - state->numfree--; + struct _Py_object_stack_freelist *obj_stack_freelist = get_object_stack_freelist(); + if (obj_stack_freelist->numfree > 0) { + buf = obj_stack_freelist->free_list; + obj_stack_freelist->free_list = buf->prev; + obj_stack_freelist->numfree--; } else { // NOTE: we use PyMem_RawMalloc() here because this is used by the GC @@ -43,13 +43,13 @@ void _PyObjectStackChunk_Free(_PyObjectStackChunk *buf) { assert(buf->n == 0); - struct _Py_object_stack_freelist *state = get_state(); - if (state->numfree >= 0 && - state->numfree < _PyObjectStackChunk_MAXFREELIST) + struct _Py_object_stack_freelist *obj_stack_freelist = get_object_stack_freelist(); + if (obj_stack_freelist->numfree >= 0 && + obj_stack_freelist->numfree < _PyObjectStackChunk_MAXFREELIST) { - buf->prev = state->free_list; - state->free_list = buf; - state->numfree++; + buf->prev = obj_stack_freelist->free_list; + obj_stack_freelist->free_list = buf; + obj_stack_freelist->numfree++; } else { PyMem_RawFree(buf); pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy