mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
bpo-39573: Use Py_REFCNT() macro (GH-18388)
Replace direct acccess to PyObject.ob_refcnt with usage of the Py_REFCNT() macro.
This commit is contained in:
parent
446463f8db
commit
a93c51e3a8
9 changed files with 42 additions and 38 deletions
|
|
@ -3550,8 +3550,8 @@ slot_tp_del(PyObject *self)
|
|||
PyObject *error_type, *error_value, *error_traceback;
|
||||
|
||||
/* Temporarily resurrect the object. */
|
||||
assert(self->ob_refcnt == 0);
|
||||
self->ob_refcnt = 1;
|
||||
assert(Py_REFCNT(self) == 0);
|
||||
Py_REFCNT(self) = 1;
|
||||
|
||||
/* Save the current exception, if any. */
|
||||
PyErr_Fetch(&error_type, &error_value, &error_traceback);
|
||||
|
|
@ -3573,17 +3573,19 @@ slot_tp_del(PyObject *self)
|
|||
/* Undo the temporary resurrection; can't use DECREF here, it would
|
||||
* cause a recursive call.
|
||||
*/
|
||||
assert(self->ob_refcnt > 0);
|
||||
if (--self->ob_refcnt == 0)
|
||||
return; /* this is the normal path out */
|
||||
assert(Py_REFCNT(self) > 0);
|
||||
if (--Py_REFCNT(self) == 0) {
|
||||
/* this is the normal path out */
|
||||
return;
|
||||
}
|
||||
|
||||
/* __del__ resurrected it! Make it look like the original Py_DECREF
|
||||
* never happened.
|
||||
*/
|
||||
{
|
||||
Py_ssize_t refcnt = self->ob_refcnt;
|
||||
Py_ssize_t refcnt = Py_REFCNT(self);
|
||||
_Py_NewReference(self);
|
||||
self->ob_refcnt = refcnt;
|
||||
Py_REFCNT(self) = refcnt;
|
||||
}
|
||||
assert(!PyType_IS_GC(Py_TYPE(self)) || _PyObject_GC_IS_TRACKED(self));
|
||||
/* If Py_REF_DEBUG macro is defined, _Py_NewReference() increased
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue