changeset: 100546:c298c6d8b324 branch: 3.5 user: Victor Stinner date: Tue Mar 15 17:23:35 2016 +0100 files: Lib/test/test_faulthandler.py Modules/faulthandler.c description: faulthandler: Test Py_FatalError() with GIL released Issue #26558. diff -r b394fc71f92a -r c298c6d8b324 Lib/test/test_faulthandler.py --- a/Lib/test/test_faulthandler.py Mon Mar 14 16:53:12 2016 +0100 +++ b/Lib/test/test_faulthandler.py Tue Mar 15 17:23:35 2016 +0100 @@ -185,6 +185,14 @@ 2, 'xyz') + def test_fatal_error_without_gil(self): + self.check_fatal_error(""" + import faulthandler + faulthandler._fatal_error(b'xyz', True) + """, + 2, + 'xyz') + @unittest.skipIf(sys.platform.startswith('openbsd') and HAVE_THREADS, "Issue #12868: sigaltstack() doesn't work on " "OpenBSD if Python is compiled with pthread") diff -r b394fc71f92a -r c298c6d8b324 Modules/faulthandler.c --- a/Modules/faulthandler.c Mon Mar 14 16:53:12 2016 +0100 +++ b/Modules/faulthandler.c Tue Mar 15 17:23:35 2016 +0100 @@ -935,10 +935,18 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) { char *message; - if (!PyArg_ParseTuple(args, "y:fatal_error", &message)) + int release_gil = 0; + if (!PyArg_ParseTuple(args, "y|i:fatal_error", &message, &release_gil)) return NULL; faulthandler_suppress_crash_report(); - Py_FatalError(message); + if (release_gil) { + Py_BEGIN_ALLOW_THREADS + Py_FatalError(message); + Py_END_ALLOW_THREADS + } + else { + Py_FatalError(message); + } Py_RETURN_NONE; }