Commit 57003f81 authored by Victor Stinner's avatar Victor Stinner

faulthandler: Test Py_FatalError() with GIL released

Issue #26558.
parent 4ddee7f5
...@@ -185,6 +185,14 @@ class FaultHandlerTests(unittest.TestCase): ...@@ -185,6 +185,14 @@ class FaultHandlerTests(unittest.TestCase):
2, 2,
'xyz') '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, @unittest.skipIf(sys.platform.startswith('openbsd') and HAVE_THREADS,
"Issue #12868: sigaltstack() doesn't work on " "Issue #12868: sigaltstack() doesn't work on "
"OpenBSD if Python is compiled with pthread") "OpenBSD if Python is compiled with pthread")
......
...@@ -935,10 +935,18 @@ static PyObject * ...@@ -935,10 +935,18 @@ static PyObject *
faulthandler_fatal_error_py(PyObject *self, PyObject *args) faulthandler_fatal_error_py(PyObject *self, PyObject *args)
{ {
char *message; 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; return NULL;
faulthandler_suppress_crash_report(); 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; Py_RETURN_NONE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment