[Python-checkins] cpython: faulthandler: suppress crash reporter directly in test functions written to

victor.stinner python-checkins at python.org
Tue Sep 30 13:51:37 CEST 2014


https://hg.python.org/cpython/rev/4f3ce83eff17
changeset: 92654:4f3ce83eff17
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Sep 30 13:40:12 2014 +0200
summary:
 faulthandler: suppress crash reporter directly in test functions written to
crash.
files:
 Modules/faulthandler.c | 47 ++++++++++++++++++++++++++---
 1 files changed, 41 insertions(+), 6 deletions(-)
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -5,7 +5,13 @@
 #include <frameobject.h>
 #include <signal.h>
 #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
-#include <pthread.h>
+# include <pthread.h>
+#endif
+#ifdef MS_WINDOWS
+# include <windows.h>
+#endif
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
 #endif
 
 /* Allocate at maximum 100 MB of the stack to raise the stack overflow */
@@ -804,6 +810,34 @@
 #endif /* FAULTHANDLER_USER */
 
 
+static void
+faulthandler_suppress_crash_report(void)
+{
+#ifdef MS_WINDOWS
+ UINT mode;
+
+ /* Configure Windows to not display the Windows Error Reporting dialog */
+ mode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ SetErrorMode(mode | SEM_NOGPFAULTERRORBOX);
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+ struct rlimit rl;
+
+ /* Disable creation of core dump */
+ if (getrlimit(RLIMIT_CORE, &rl) != 0) {
+ rl.rlim_cur = 0;
+ setrlimit(RLIMIT_CORE, &rl);
+ }
+#endif
+
+#ifdef _MSC_VER
+ /* Visual Studio: configure abort() to not display an error message nor
+ open a popup asking to report the fault. */
+ _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
+#endif
+}
+
 static PyObject *
 faulthandler_read_null(PyObject *self, PyObject *args)
 {
@@ -813,6 +847,7 @@
 if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil))
 return NULL;
 
+ faulthandler_suppress_crash_report();
 x = NULL;
 if (release_gil) {
 Py_BEGIN_ALLOW_THREADS
@@ -827,6 +862,7 @@
 static PyObject *
 faulthandler_sigsegv(PyObject *self, PyObject *args)
 {
+ faulthandler_suppress_crash_report();
 #if defined(MS_WINDOWS)
 /* For SIGSEGV, faulthandler_fatal_error() restores the previous signal
 handler and then gives back the execution flow to the program (without
@@ -853,6 +889,7 @@
 /* Do an integer division by zero: raise a SIGFPE on Intel CPU, but not on
 PowerPC. Use volatile to disable compile-time optimizations. */
 volatile int x = 1, y = 0, z;
+ faulthandler_suppress_crash_report();
 z = x / y;
 /* If the division by zero didn't raise a SIGFPE (e.g. on PowerPC),
 raise it manually. */
@@ -865,11 +902,7 @@
 static PyObject *
 faulthandler_sigabrt(PyObject *self, PyObject *args)
 {
-#ifdef _MSC_VER
- /* Visual Studio: configure abort() to not display an error message nor
- open a popup asking to report the fault. */
- _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
-#endif
+ faulthandler_suppress_crash_report();
 abort();
 Py_RETURN_NONE;
 }
@@ -880,6 +913,7 @@
 char *message;
 if (!PyArg_ParseTuple(args, "y:fatal_error", &message))
 return NULL;
+ faulthandler_suppress_crash_report();
 Py_FatalError(message);
 Py_RETURN_NONE;
 }
@@ -905,6 +939,7 @@
 size_t depth, size;
 char *sp = (char *)&depth, *stop;
 
+ faulthandler_suppress_crash_report();
 depth = 0;
 stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE,
 sp + STACK_OVERFLOW_MAX_SIZE,
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

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