-
-
Notifications
You must be signed in to change notification settings - Fork 31.8k
bpo-44881: Integrate GC untrack into trashcan begin. #27718
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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.
Let's land #27678 first to include that change in this PR |
Just to be clear, I don't consider this PR a bugfix and it would not be appropriate to include in 3.10. |
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.
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. |
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