mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
SF Patch #1463867: Improved generator finalization to allow generators
that are suspended outside of any try/except/finally blocks to be garbage collected even if they are part of a cycle. Generators that suspend inside of an active try/except or try/finally block (including those created by a ``with`` statement) are still not GC-able if they are part of a cycle, however.
This commit is contained in:
parent
17de8ffc21
commit
2ba96610bf
4 changed files with 29 additions and 1 deletions
|
@ -413,8 +413,12 @@ has_finalizer(PyObject *op)
|
|||
assert(delstr != NULL);
|
||||
return _PyInstance_Lookup(op, delstr) != NULL;
|
||||
}
|
||||
else
|
||||
else if (PyType_HasFeature(op->ob_type, Py_TPFLAGS_HEAPTYPE))
|
||||
return op->ob_type->tp_del != NULL;
|
||||
else if (PyGen_CheckExact(op))
|
||||
return PyGen_NeedsFinalizing((PyGenObject *)op);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Move the objects in unreachable with __del__ methods into `finalizers`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue