mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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.
This commit is contained in:
parent
bea8ae7948
commit
1df1536fb9
5 changed files with 39 additions and 4 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue