diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index 08cbfe46b0daff..ef3f1b6d208fee 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -431,74 +431,6 @@ _Py_DECREF_CODE(PyCodeObject *co) } #endif -#ifndef Py_GIL_DISABLED -#ifdef Py_REF_DEBUG - -static inline void Py_DECREF_MORTAL(const char *filename, int lineno, PyObject *op) -{ - if (op->ob_refcnt <= 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - _Py_DECREF_STAT_INC(); - assert(!_Py_IsStaticImmortal(op)); - if (!_Py_IsImmortal(op)) { - _Py_DECREF_DecRefTotal(); - } - if (--op->ob_refcnt == 0) { -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#endif - _Py_Dealloc(op); - } -} -#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(__FILE__, __LINE__, _PyObject_CAST(op)) - -static inline void _Py_DECREF_MORTAL_SPECIALIZED(const char *filename, int lineno, PyObject *op, destructor destruct) -{ - if (op->ob_refcnt <= 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - _Py_DECREF_STAT_INC(); - assert(!_Py_IsStaticImmortal(op)); - if (!_Py_IsImmortal(op)) { - _Py_DECREF_DecRefTotal(); - } - if (--op->ob_refcnt == 0) { -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#endif - _PyReftracerTrack(op, PyRefTracer_DESTROY); - destruct(op); - } -} -#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) _Py_DECREF_MORTAL_SPECIALIZED(__FILE__, __LINE__, op, destruct) - -#else - -static inline void Py_DECREF_MORTAL(PyObject *op) -{ - assert(!_Py_IsStaticImmortal(op)); - _Py_DECREF_STAT_INC(); - if (--op->ob_refcnt == 0) { - _Py_Dealloc(op); - } -} -#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op)) - -static inline void Py_DECREF_MORTAL_SPECIALIZED(PyObject *op, destructor destruct) -{ - assert(!_Py_IsStaticImmortal(op)); - _Py_DECREF_STAT_INC(); - if (--op->ob_refcnt == 0) { - _PyReftracerTrack(op, PyRefTracer_DESTROY); - destruct(op); - } -} -#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) Py_DECREF_MORTAL_SPECIALIZED(_PyObject_CAST(op), destruct) - -#endif -#endif - /* Inline functions trading binary compatibility for speed: _PyObject_Init() is the fast version of PyObject_Init(), and _PyObject_InitVar() is the fast version of PyObject_InitVar(). diff --git a/Include/refcount.h b/Include/refcount.h index 177bbdaf0c5977..417d91bfa0da92 100644 --- a/Include/refcount.h +++ b/Include/refcount.h @@ -394,6 +394,42 @@ static inline void Py_DECREF(PyObject *op) #define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op)) #elif defined(Py_REF_DEBUG) +static inline void Py_DECREF_MORTAL(const char *filename, int lineno, PyObject *op) +{ + if (op->ob_refcnt <= 0) { + _Py_NegativeRefcount(filename, lineno, op); + } + _Py_DECREF_STAT_INC(); + assert(!_Py_IsStaticImmortal(op)); + if (!_Py_IsImmortal(op)) { + _Py_DECREF_DecRefTotal(); + } + if (--op->ob_refcnt == 0) { + _Py_Dealloc(op); + } +} +#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(__FILE__, __LINE__, _PyObject_CAST(op)) + + + +static inline void _Py_DECREF_MORTAL_SPECIALIZED(const char *filename, int lineno, PyObject *op, destructor destruct) +{ + if (op->ob_refcnt <= 0) { + _Py_NegativeRefcount(filename, lineno, op); + } + _Py_DECREF_STAT_INC(); + assert(!_Py_IsStaticImmortal(op)); + if (!_Py_IsImmortal(op)) { + _Py_DECREF_DecRefTotal(); + } + if (--op->ob_refcnt == 0) { +#ifdef Py_TRACE_REFS + _Py_ForgetReference(op); +#endif + destruct(op); + } +} +#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) _Py_DECREF_MORTAL_SPECIALIZED(__FILE__, __LINE__, op, destruct) static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) { @@ -419,6 +455,28 @@ static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) #define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) #else +static inline void Py_DECREF_MORTAL(PyObject *op) +{ + assert(!_Py_IsStaticImmortal(op)); + _Py_DECREF_STAT_INC(); + if (--op->ob_refcnt == 0) { + _Py_Dealloc(op); + } +} +#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op)) + +static inline void Py_DECREF_MORTAL_SPECIALIZED(PyObject *op, destructor destruct) +{ + assert(!_Py_IsStaticImmortal(op)); + _Py_DECREF_STAT_INC(); + if (--op->ob_refcnt == 0) { +#ifdef Py_TRACE_REFS + _Py_ForgetReference(op); +#endif + destruct(op); + } +} +#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) Py_DECREF_MORTAL_SPECIALIZED(_PyObject_CAST(op), destruct) static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op) { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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