[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

AltStyle によって変換されたページ (->オリジナル) /