From 64b32a2e48eecce58447ae9f0c678464720eb960 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Mon, 13 Sep 2010 14:16:46 +0000 Subject: 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. --- Python/ceval.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Python/ceval.c') diff --git a/Python/ceval.c b/Python/ceval.c index a181ca83fe..48b5678652 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -312,6 +312,15 @@ PyEval_InitThreads(void) pending_lock = PyThread_allocate_lock(); } +void +_PyEval_FiniThreads(void) +{ + if (!gil_created()) + return; + destroy_gil(); + assert(!gil_created()); +} + void PyEval_AcquireLock(void) { @@ -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); -- cgit v1.2.1