Commit 23b0b925 authored by Charles-François Natali's avatar Charles-François Natali

Issue #13156: _PyGILState_Reinit(): Re-associate the auto thread state with the

TLS key only if the thread that called fork() had an associated auto thread
state (this might not be the case for example for a thread created outside of
Python calling into a subinterpreter).
parents 221ef67f a233df88
......@@ -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");
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment