bpo-39984: _PyThreadState_DeleteCurrent() takes tstate (GH-19051)
* _PyThreadState_DeleteCurrent() now takes tstate rather than
runtime.
* Add ensure_tstate_not_null() helper to pystate.c.
* Add _PyEval_ReleaseLock() function.
* _PyThreadState_DeleteCurrent() now calls
_PyEval_ReleaseLock(tstate) and frees PyThreadState memory after
this call, not before.
* PyGILState_Release(): rename "tcur" variable to "tstate".
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 5a85c48..0243439 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -62,7 +62,8 @@
# This used to cause an infinite loop.
self.assertTrue(err.rstrip().startswith(
b'Fatal Python error: '
- b'PyThreadState_Get: no current thread'))
+ b'PyThreadState_Get: '
+ b'current thread state is NULL (released GIL?)'))
def test_memoryview_from_NULL_pointer(self):
self.assertRaises(ValueError, _testcapi.make_memoryview_from_NULL_pointer)