gh-107080: Fix Py_TRACE_REFS Crashes Under Isolated Subinterpreters#107567
gh-107080: Fix Py_TRACE_REFS Crashes Under Isolated Subinterpreters#107567ericsnowcurrently merged 6 commits intopython:mainfrom
Conversation
Python/pylifecycle.c
Outdated
| } | ||
|
|
||
| PyObject refchain = { 0 }; | ||
| _Py_StealRefchain(tstate->interp, &refchain); |
There was a problem hiding this comment.
The interpreter will be deallocated before we later call _Py_PrintReferenceAddresses() to walk the linked list.
That said, I think there's a related problem that I still need to address. Namely, every remaining object in the linked list will be (effectively) freed when the interpreter's allocator is finalized, so the _ob_next and _ob_prev accesses might segfault. It likely isn't a big problem during runtime finalization (except perhaps for embedders) but I'll fix that regardless.
There was a problem hiding this comment.
Hmm, I'm pretty sure that's not actually a problem. We only call _Py_PrintReferenceAddresses() in Py_FinalizeEx() and only for the main interpreter, which is statically allocated. Objects in the linked list might still cause a segfault but only if they would have before this change, so I'm not going to worry about that here. I will leave a note in the code though.
|
Thanks @ericsnowcurrently for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12. |
|
GH-107599 is a backport of this pull request to the 3.12 branch. |
…ters (pythongh-107567) The linked list of objects was a global variable, which broke isolation between interpreters, causing crashes. To solve this, we've moved the linked list to each interpreter. (cherry picked from commit 58ef741) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
…eters (gh-107567) (#107599) gh-107080: Fix Py_TRACE_REFS Crashes Under Isolated Subinterpreters (gh-107567) The linked list of objects was a global variable, which broke isolation between interpreters, causing crashes. To solve this, we've moved the linked list to each interpreter. (cherry picked from commit 58ef741) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
…ted Subinterpreters (pythongh-107567) (python#107599)" This reverts commit 58af229.
…lated Subinterpreters (pythongh-107567) (python#107599)". This reverts commit 6e4eec7 (pythongh-107648).
The linked list of objects was a global variable, which broke isolation between interpreters, causing crashes. To solve this, we've moved the linked list to each interpreter.