On Fri, 20 Mar 2020 19:24:22 +0100 Victor Stinner <vstinner@python.org> wrote:
One good example is Py_AddPendingCall(). The documentation says that it's safe to call it without holding the GIL. Except that right now, there is no reliable way to get the correct interpreter in this case (correct me if I'm wrong!).
Define what "the correct interpreter" is? The only way to solve this conundrum IMHO is to add a `Py_AddPendingCallEx(PyInterpreterState*)`.
The function uses PyGILState_GetThisThreadState() which may return a Python thread state of the wrong interpreter :-( Again, the PyGILState API should be fixed to support subinterpreters.
Similarly, the only possible fix is to add a per-interpreter GILState API (with a per-interpreter TLS variable under the hood). The caller knows which interpreter context it wants to run Python code in, so just let it pass that information to the GILState API. The most annoying part is what to do with the legacy GILState API. Regards Antoine.