summaryrefslogtreecommitdiffstats
path: root/Python/pystate.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index 0832b37..1ea1ad9 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -1843,7 +1843,7 @@ _PyThreadState_DeleteCurrent(PyThreadState *tstate)
#endif
current_fast_clear(tstate->interp->runtime);
tstate_delete_common(tstate);
- _PyEval_ReleaseLock(tstate->interp, NULL);
+ _PyEval_ReleaseLock(tstate->interp, tstate, 1);
free_threadstate((_PyThreadStateImpl *)tstate);
}
@@ -2068,7 +2068,7 @@ _PyThreadState_Attach(PyThreadState *tstate)
while (1) {
- int acquired_gil = _PyEval_AcquireLock(tstate);
+ _PyEval_AcquireLock(tstate);
// XXX assert(tstate_is_alive(tstate));
current_fast_set(&_PyRuntime, tstate);
@@ -2079,20 +2079,17 @@ _PyThreadState_Attach(PyThreadState *tstate)
}
#ifdef Py_GIL_DISABLED
- if (_PyEval_IsGILEnabled(tstate) != acquired_gil) {
+ if (_PyEval_IsGILEnabled(tstate) && !tstate->_status.holds_gil) {
// The GIL was enabled between our call to _PyEval_AcquireLock()
// and when we attached (the GIL can't go from enabled to disabled
// here because only a thread holding the GIL can disable
// it). Detach and try again.
- assert(!acquired_gil);
tstate_set_detached(tstate, _Py_THREAD_DETACHED);
tstate_deactivate(tstate);
current_fast_clear(&_PyRuntime);
continue;
}
_Py_qsbr_attach(((_PyThreadStateImpl *)tstate)->qsbr);
-#else
- (void)acquired_gil;
#endif
break;
}
@@ -2123,7 +2120,7 @@ detach_thread(PyThreadState *tstate, int detached_state)
tstate_deactivate(tstate);
tstate_set_detached(tstate, detached_state);
current_fast_clear(&_PyRuntime);
- _PyEval_ReleaseLock(tstate->interp, tstate);
+ _PyEval_ReleaseLock(tstate->interp, tstate, 0);
}
void