diff --git a/Python/pystate.c b/Python/pystate.c --- a/Python/pystate.c +++ b/Python/pystate.c @@ -586,9 +586,9 @@ autoInterpreterState = NULL; } -/* Reset the TLS key - called by PyOS_AfterFork. +/* Reset the TLS key - called by PyOS_AfterFork(). * This should not be necessary, but some - buggy - pthread implementations - * don't flush TLS on fork, see issue #10517. + * don't reset TLS upon fork(), see issue #10517. */ void _PyGILState_Reinit(void) @@ -598,8 +598,10 @@ if ((autoTLSkey = PyThread_create_key()) == -1) Py_FatalError("Could not allocate TLS entry"); - /* re-associate the current thread state with the new key */ - if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) + /* If the thread had an associated auto thread state, reassociate it with + * the new key (this will not hold, for example, for a thread created + * outside of Python calling into a subinterpreter). */ + if (tstate && PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) Py_FatalError("Couldn't create autoTLSkey mapping"); }