Fix the GIL with subinterpreters. Hopefully this will allow mod_wsgi to work with 3.2.

(we need some tests for this)
This commit is contained in:
Antoine Pitrou 2011-01-15 11:37:11 +00:00
parent ad30c4206a
commit 6a002c02da
1 changed files with 7 additions and 4 deletions

View File

@ -334,12 +334,15 @@ static void recreate_gil(void)
static void drop_gil(PyThreadState *tstate)
{
/* NOTE: tstate is allowed to be NULL. */
if (!_Py_atomic_load_relaxed(&gil_locked))
Py_FatalError("drop_gil: GIL is not locked");
if (tstate != NULL &&
tstate != _Py_atomic_load_relaxed(&gil_last_holder))
Py_FatalError("drop_gil: wrong thread state");
/* tstate is allowed to be NULL (early interpreter init) */
if (tstate != NULL) {
/* Sub-interpreter support: threads might have been switched
under our feet using PyThreadState_Swap(). Fix the GIL last
holder variable so that our heuristics work. */
_Py_atomic_store_relaxed(&gil_last_holder, tstate);
}
MUTEX_LOCK(gil_mutex);
_Py_ANNOTATE_RWLOCK_RELEASED(&gil_locked, /*is_write=*/1);