From cbe129692293251e7fbcea9ff0d822824d90c140 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 1 Jun 2020 20:34:15 +0200 Subject: [PATCH] bpo-40826: PyOS_InterruptOccurred() requires GIL (GH-20578) PyOS_InterruptOccurred() now fails with a fatal error if it is called with the GIL released. --- .../next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst | 2 ++ Modules/signalmodule.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/C API/2020-06-01-16-12-37.bpo-40826.zQzFoK.rst 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 00000000000..0d7a36c3eb4 --- /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 8348971c353..6d340a68634 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; }