Charles-François Natali <neolo...@free.fr> added the comment:
Here's a patch for 3.2 and default which calls
PyThread_set_key_value() only if there was an auto thread state
previously associated (while the current code works with pthread TLS,
there are other implementations which may behave strangely, and
there's still the ad-hoc implementation in Python/thread.c).
----------
Added file: http://bugs.python.org/file23391/tstate_after_fork.diff
_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue13156>
_______________________________________
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");
}
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com