mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
GH-127705: Move mortal decrefs to internal header and make sure _PyReftracerTrack is called
This commit is contained in:
parent
9881fc5483
commit
fd545d735d
2 changed files with 68 additions and 58 deletions
|
@ -394,42 +394,6 @@ 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)
|
||||
{
|
||||
|
@ -455,28 +419,6 @@ 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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue