summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2006-02-27 17:15:31 (GMT)
committerTim Peters <tim.peters@gmail.com>2006-02-27 17:15:31 (GMT)
commitf4e6928c4d259fbff9fa8e48496339009333f228 (patch)
tree74cc6bf6f7acaaed5b27f4075c8eca323c90ab6c
parent8622e93eab3583a7ab4d6018cd9816bb1deef338 (diff)
downloadcpython-f4e6928c4d259fbff9fa8e48496339009333f228.zip
cpython-f4e6928c4d259fbff9fa8e48496339009333f228.tar.gz
cpython-f4e6928c4d259fbff9fa8e48496339009333f228.tar.bz2
Patch 1413181, by Gabriel Becedillas.
PyThreadState_Delete(): if the auto-GIL-state machinery knows about the thread state, forget 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). I'll backport to 2.4 next.
-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 */
}