parent
4ddee7f5fd
commit
57003f81ea
|
@ -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 *
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue