diff --git a/Python/pystate.c b/Python/pystate.c index 40699af4994..3b4c6a2e65f 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -592,9 +592,9 @@ _PyGILState_Fini(void) 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) @@ -604,8 +604,9 @@ _PyGILState_Reinit(void) 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. */ + if (tstate && PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) Py_FatalError("Couldn't create autoTLSkey mapping"); }