summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS6
-rw-r--r--Python/pystate.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 4f7f8d8..2791cbe 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -230,6 +230,12 @@ Core and builtins
unicode instance if the argument is not an instance of basestring and
calling __str__ on the argument returns a unicode instance.
+- Patch #1413181: changed ``PyThreadState_Delete()`` to forget about the
+ current thread state when the auto-GIL-state machinery knows about
+ it (since the thread state is being deleted, continuing to remember it
+ can't help, but can hurt if another thread happens to get created with
+ the same thread id).
+
Extension Modules
-----------------
diff --git a/Python/pystate.c b/Python/pystate.c
index 6584cda..867334e 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -262,6 +262,10 @@ PyThreadState_Delete(PyThreadState *tstate)
if (tstate == _PyThreadState_Current)
Py_FatalError("PyThreadState_Delete: tstate is still current");
tstate_delete_common(tstate);
+#ifdef WITH_THREAD
+ if (autoTLSkey && PyThread_get_key_value(autoTLSkey) == tstate)
+ PyThread_delete_key_value(autoTLSkey);
+#endif /* WITH_THREAD */
}