summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst2
-rw-r--r--Modules/signalmodule.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/Misc/NEWS.d/next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst b/Misc/NEWS.d/next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst
new file mode 100644
index 0000000..0d7a36c
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst
@@ -0,0 +1,2 @@
+:c:func:`PyOS_InterruptOccurred` now fails with a fatal error if it is
+called with the GIL released.
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 8348971..6d340a6 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -1782,8 +1782,9 @@ PyOS_FiniInterrupts(void)
int
PyOS_InterruptOccurred(void)
{
- PyInterpreterState *interp = _PyInterpreterState_GET();
- if (!_Py_ThreadCanHandleSignals(interp)) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ _Py_EnsureTstateNotNULL(tstate);
+ if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
return 0;
}