[Python-checkins] cpython (merge 3.4 -> default): (Merge 3.4) faulthandler: test_gil_released() now uses _sigsegv() instead of
victor.stinner
python-checkins at python.org
Tue Sep 30 14:06:35 CEST 2014
https://hg.python.org/cpython/rev/6e7d923dfd2a
changeset: 92657:6e7d923dfd2a
parent: 92654:4f3ce83eff17
parent: 92656:eb2bf1c2f654
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Sep 30 13:55:30 2014 +0200
summary:
(Merge 3.4) faulthandler: test_gil_released() now uses _sigsegv() instead of
_read_null(), because _read_null() cannot be used on AIX. On AIX, reading from
NULL is allowed: the first page of memory is a mapped read-only on AIX.
_read_null() and _sigabrt() don't accept parameters.
files:
Lib/test/test_faulthandler.py | 4 +-
Modules/faulthandler.c | 38 +++++++++++++---------
2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -194,10 +194,10 @@
self.check_fatal_error("""
import faulthandler
faulthandler.enable()
- faulthandler._read_null(True)
+ faulthandler._sigsegv(True)
""",
3,
- '(?:Segmentation fault|Bus error|Illegal instruction)')
+ 'Segmentation fault')
def test_enable_file(self):
with temporary_filename() as filename:
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -843,24 +843,16 @@
{
volatile int *x;
volatile int y;
- int release_gil = 0;
- if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil))
- return NULL;
faulthandler_suppress_crash_report();
x = NULL;
- if (release_gil) {
- Py_BEGIN_ALLOW_THREADS
- y = *x;
- Py_END_ALLOW_THREADS
- } else
- y = *x;
+ y = *x;
return PyLong_FromLong(y);
}
-static PyObject *
-faulthandler_sigsegv(PyObject *self, PyObject *args)
+static void
+faulthandler_raise_sigsegv(void)
{
faulthandler_suppress_crash_report();
#if defined(MS_WINDOWS)
@@ -880,6 +872,22 @@
#else
raise(SIGSEGV);
#endif
+}
+
+static PyObject *
+faulthandler_sigsegv(PyObject *self, PyObject *args)
+{
+ int release_gil = 0;
+ if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil))
+ return NULL;
+
+ if (release_gil) {
+ Py_BEGIN_ALLOW_THREADS
+ faulthandler_raise_sigsegv();
+ Py_END_ALLOW_THREADS
+ } else {
+ faulthandler_raise_sigsegv();
+ }
Py_RETURN_NONE;
}
@@ -1020,12 +1028,12 @@
"'signum' registered by register()")},
#endif
- {"_read_null", faulthandler_read_null, METH_VARARGS,
- PyDoc_STR("_read_null(release_gil=False): read from NULL, raise "
+ {"_read_null", faulthandler_read_null, METH_NOARGS,
+ PyDoc_STR("_read_null(): read from NULL, raise "
"a SIGSEGV or SIGBUS signal depending on the platform")},
{"_sigsegv", faulthandler_sigsegv, METH_VARARGS,
- PyDoc_STR("_sigsegv(): raise a SIGSEGV signal")},
- {"_sigabrt", faulthandler_sigabrt, METH_VARARGS,
+ PyDoc_STR("_sigsegv(release_gil=False): raise a SIGSEGV signal")},
+ {"_sigabrt", faulthandler_sigabrt, METH_NOARGS,
PyDoc_STR("_sigabrt(): raise a SIGABRT signal")},
{"_sigfpe", (PyCFunction)faulthandler_sigfpe, METH_NOARGS,
PyDoc_STR("_sigfpe(): raise a SIGFPE signal")},
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list