https://github.com/python/cpython/commit/6e5b9f3d00658ce07909d78d1a796e95ad5dba1a
commit: 6e5b9f3d00658ce07909d78d1a796e95ad5dba1a
branch: main
author: Mark Shannon <m...@hotpy.org>
committer: markshannon <m...@hotpy.org>
date: 2025-03-11T11:53:07Z
summary:

GH-127705: Check for immortality in refcount accounting (#131072)

Check for immortality in refcount accounting

files:
M Include/refcount.h

diff --git a/Include/refcount.h b/Include/refcount.h
index 88918409d934f6..e66e4aaace3140 100644
--- a/Include/refcount.h
+++ b/Include/refcount.h
@@ -249,7 +249,9 @@ static inline Py_ALWAYS_INLINE void 
Py_INCREF_MORTAL(PyObject *op)
     op->ob_refcnt++;
     _Py_INCREF_STAT_INC();
 #if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
-    _Py_INCREF_IncRefTotal();
+    if (!_Py_IsImmortal(op)) {
+        _Py_INCREF_IncRefTotal();
+    }
 #endif
 }
 #endif
@@ -391,7 +393,9 @@ static inline void Py_DECREF_MORTAL(const char *filename, 
int lineno, PyObject *
     }
     _Py_DECREF_STAT_INC();
     assert(!_Py_IsStaticImmortal(op));
-    _Py_DECREF_DecRefTotal();
+    if (!_Py_IsImmortal(op)) {
+        _Py_DECREF_DecRefTotal();
+    }
     if (--op->ob_refcnt == 0) {
         _Py_Dealloc(op);
     }
@@ -407,7 +411,9 @@ static inline void _Py_DECREF_MORTAL_SPECIALIZED(const char 
*filename, int linen
     }
     _Py_DECREF_STAT_INC();
     assert(!_Py_IsStaticImmortal(op));
-    _Py_DECREF_DecRefTotal();
+    if (!_Py_IsImmortal(op)) {
+        _Py_DECREF_DecRefTotal();
+    }
     if (--op->ob_refcnt == 0) {
         destruct(op);
     }

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to