[Python-checkins] cpython (3.4): faulthandler: test_gil_released() now uses _sigsegv() instead of _read_null(),
victor.stinner
python-checkins at python.org
Tue Sep 30 14:06:35 CEST 2014
https://hg.python.org/cpython/rev/eb2bf1c2f654
changeset: 92656:eb2bf1c2f654
branch: 3.4
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Sep 30 13:54:14 2014 +0200
summary:
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.
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
@@ -184,10 +184,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
@@ -809,23 +809,15 @@
{
volatile int *x;
volatile int y;
- int release_gil = 0;
- if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil))
- return NULL;
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)
{
#if defined(MS_WINDOWS)
/* For SIGSEGV, faulthandler_fatal_error() restores the previous signal
@@ -844,6 +836,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;
}
@@ -1003,11 +1011,11 @@
"'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_NOARGS,
- PyDoc_STR("_sigsegv(): raise a SIGSEGV signal")},
+ {"_sigsegv", faulthandler_sigsegv, 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,
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list