mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
gh-113750: Fix object resurrection in free-threaded builds (gh-113751)
gh-113750: Fix object resurrection on free-threaded builds This avoids the undesired re-initializing of fields like `ob_gc_bits`, `ob_mutex`, and `ob_tid` when an object is resurrected due to its finalizer being called. This change has no effect on the default (with GIL) build.
This commit is contained in:
parent
3375dfed40
commit
d0f0308a37
3 changed files with 14 additions and 6 deletions
|
|
@ -509,9 +509,7 @@ PyObject_CallFinalizerFromDealloc(PyObject *self)
|
|||
|
||||
/* tp_finalize resurrected it! Make it look like the original Py_DECREF
|
||||
* never happened. */
|
||||
Py_ssize_t refcnt = Py_REFCNT(self);
|
||||
_Py_NewReferenceNoTotal(self);
|
||||
Py_SET_REFCNT(self, refcnt);
|
||||
_Py_ResurrectReference(self);
|
||||
|
||||
_PyObject_ASSERT(self,
|
||||
(!_PyType_IS_GC(Py_TYPE(self))
|
||||
|
|
@ -2389,6 +2387,17 @@ _Py_NewReferenceNoTotal(PyObject *op)
|
|||
new_reference(op);
|
||||
}
|
||||
|
||||
void
|
||||
_Py_ResurrectReference(PyObject *op)
|
||||
{
|
||||
if (_PyRuntime.tracemalloc.config.tracing) {
|
||||
_PyTraceMalloc_NewReference(op);
|
||||
}
|
||||
#ifdef Py_TRACE_REFS
|
||||
_Py_AddToAllObjects(op);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef Py_TRACE_REFS
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue