Uh oh!
There was an error while loading. Please reload this page.
gh-117953: Always Run Extension Init Func in Main Interpreter First - #118157
Conversation
8d04512 to
b09c445Compareericsnowcurrently
commented
May 6, 2024
FYI, there's a refleak somewhere in here that I'm tracking down. |
zooba
left a comment
There was a problem hiding this comment.
Nothing jumps out at me looking like a refleak, unfortunately. Possible the first import is leaking something in the main interpreter and it's not being counted right in the subinterpreter? (Or vice versa)
| * and then continue loading like normal. */ | ||
| PyThreadState *main_tstate = NULL; | ||
| if (!_Py_IsMainInterpreter(tstate->interp)) { |
There was a problem hiding this comment.
Is this necessary if switch_to_main_interpreter is doing the same check?
There was a problem hiding this comment.
It isn't necessary, but I wanted to be explicit about it. I'll see about cleaning that up.
| @@ -1941,15 +2005,73 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, | |||
| if (cached == NULL) { | |||
| goto error; | |||
There was a problem hiding this comment.
Can we do this without switching back?
There was a problem hiding this comment.
Yeah, I noticed that too and have already fixed it locally. 😄
…irst (pythongh-118157) This change makes sure all extension/builtin modules have their init function run first by the main interpreter before proceeding with import in the original interpreter (main or otherwise). This means when the import of a single-phase init module fails in an isolated subinterpreter, it won't tie any global state/callbacks to the subinterpreter.
pythongh-121503) The change in pythongh-118157 (b2cd54a) should have also updated clear_singlephase_extension() but didn't. We fix that here. Note that clear_singlephase_extension() (AKA _PyImport_ClearExtension()) is only used in tests. (cherry picked from commit 15d48ae) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
…ds (gh-121517) The change in gh-118157 (b2cd54a) should have also updated clear_singlephase_extension() but didn't. We fix that here. Note that clear_singlephase_extension() (AKA _PyImport_ClearExtension()) is only used in tests. (cherry picked from commit 15d48ae, AKA gh-121503) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
pythongh-121503) The change in pythongh-118157 (b2cd54a) should have also updated clear_singlephase_extension() but didn't. We fix that here. Note that clear_singlephase_extension() (AKA _PyImport_ClearExtension()) is only used in tests.
pythongh-121503) The change in pythongh-118157 (b2cd54a) should have also updated clear_singlephase_extension() but didn't. We fix that here. Note that clear_singlephase_extension() (AKA _PyImport_ClearExtension()) is only used in tests.
This change makes sure all extension/builtin modules have their init function run first by the main interpreter before proceeding with import in the original interpreter (main or otherwise). This means when the import of a single-phase init module fails in an isolated subinterpreter, it won't tie any global state/callbacks to the subinterpreter.
This supercedes gh-117487.