[Python-checkins] cpython (3.2): Issue #13156: _PyGILState_Reinit(): Re-associate the auto thread state with the

charles-francois.natali python-checkins at python.org
Tue Nov 22 19:52:01 CET 2011


http://hg.python.org/cpython/rev/ba90839c4993
changeset:   73694:ba90839c4993
branch:      3.2
parent:      73691:311bb5e65b02
user:        Charles-François Natali <neologix at free.fr>
date:        Tue Nov 22 19:49:51 2011 +0100
summary:
  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).

files:
  Python/pystate.c |  9 +++++----
  1 files changed, 5 insertions(+), 4 deletions(-)


diff --git a/Python/pystate.c b/Python/pystate.c
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -592,9 +592,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)
@@ -604,8 +604,9 @@
     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");
 }
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list