Uh oh!
There was an error while loading. Please reload this page.
bpo-44881: Integrate GC untrack into trashcan begin. - #27718
Conversation
For subtle reasons, PyObject_GC_UnTrack() function must be called before Py_TRASHCAN_BEGIN(). There have been a number of bugs over the years related to not doing this particular dance just right. Integrating the PyObject_GC_UnTrack() call makes it harder to do things incorrectly. That avoids some hard to find bugs (e.g. only triggered when object nesting gets deep enough). Extensions that still call PyObject_GC_UnTrack() explictly will still work correctly but the call is unneeded after this change. It would still be needed for the extension to work correctly with older versions of Python.
pablogsal
commented
Aug 10, 2021
Let's land #27678 first to include that change in this PR |
nascheme
commented
Aug 10, 2021
Just to be clear, I don't consider this PR a bugfix and it would not be appropriate to include in 3.10. |
pablogsal
commented
Aug 10, 2021
Yep, we are on the same page :) |
It seems slightly cleaner to have the BEGIN/END macros at the start and end of the dealloc function body.
Uh oh!
There was an error while loading. Please reload this page.
ambv
commented
Aug 16, 2021
We won't be merging this as of yet because an alternative solution is evaluated in GH-27738. I added the assert Victor wanted so that the benchmarks are fairer between the two approaches. |
This PR is stale because it has been open for 30 days with no activity. |
nascheme
commented
Apr 8, 2025
This PR is out of date and will not be required if GH-132280 gets merged. That PR integrates the trashcan mechanism into |
For subtle reasons, PyObject_GC_UnTrack() function must be called before
Py_TRASHCAN_BEGIN(). There have been a number of bugs over the years
related to not doing this particular dance just right. Integrating
the PyObject_GC_UnTrack() call makes it harder to do things incorrectly.
That avoids some hard to find bugs (e.g. only triggered when object
nesting gets deep enough).
Extensions that still call PyObject_GC_UnTrack() explictly will
work correctly but the call is unneeded after this change. It would
still be needed for the extension to work correctly with older versions
of Python.
https://bugs.python.org/issue44881