Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
Open
Description
In the C API, we have some functions that need to access state that is deleted by finalization. For example,PyGILState_Ensure
accesses the gilstate, and that can be concurrently deallocated. In that specific case, I proposed#132510 as a fix, but really, we should have a better way to protect state against a finalizing interpreter. I'm not sure whether to categorize this as a bug or a feature.
I think the best way to do this is through a finalizing counter similar to howPEP-788 proposes preventing interpreter shutdown. So, for functions that don't require an attached thread state, we need something like:
intPySomething_Whatever(PyInterpreterState*interp){if (_PyInterpreterState_CriticalSection(interp)<0) {// Interpreter has finalizedreturn-1; }/* Do critical operation */_PyInterpreterState_EndCriticalSection(interp);return0;}
Does this approach seem reasonable to everyone?
Metadata
Metadata
Assignees
Labels
Projects
Status
Todo