summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-13 14:16:46 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-13 14:16:46 (GMT)
commit1df1536fb98c1c2bbeefe373bc38877129f905e1 (patch)
treea1489c86f4f1ea5b0645afcabf8aee765826d18a /Python/ceval.c
parentbea8ae794873485eef1b0c0c20b374df99858430 (diff)
downloadcpython-1df1536fb98c1c2bbeefe373bc38877129f905e1.zip
cpython-1df1536fb98c1c2bbeefe373bc38877129f905e1.tar.gz
cpython-1df1536fb98c1c2bbeefe373bc38877129f905e1.tar.bz2
Issue #9828: Destroy the GIL in Py_Finalize(), so that it gets properly
re-created on a subsequent call to Py_Initialize(). The problem (a crash) wouldn't appear in 3.1 or 2.7 where the GIL's structure is more trivial.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index a181ca8..48b5678 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -313,6 +313,15 @@ PyEval_InitThreads(void)
}
void
+_PyEval_FiniThreads(void)
+{
+ if (!gil_created())
+ return;
+ destroy_gil();
+ assert(!gil_created());
+}
+
+void
PyEval_AcquireLock(void)
{
PyThreadState *tstate = PyThreadState_GET();
@@ -368,10 +377,6 @@ PyEval_ReInitThreads(void)
if (!gil_created())
return;
- /*XXX Can't use PyThread_free_lock here because it does too
- much error-checking. Doing this cleanly would require
- adding a new function to each thread_*.h. Instead, just
- create a new lock and waste a little bit of memory */
recreate_gil();
pending_lock = PyThread_allocate_lock();
take_gil(tstate);