[Python-checkins] cpython: Issue #11393: fault handler uses raise(signum) for SIGILL on Windows

victor.stinner python-checkins at python.org
Fri Apr 1 12:14:28 CEST 2011


http://hg.python.org/cpython/rev/e51d8a160a8a
changeset: 69099:e51d8a160a8a
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Fri Apr 01 12:08:57 2011 +0200
summary:
 Issue #11393: fault handler uses raise(signum) for SIGILL on Windows
files:
 Modules/faulthandler.c | 27 ++++++++++++---------------
 1 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -270,14 +270,16 @@
 else
 _Py_DumpTraceback(fd, tstate);
 
-#ifndef MS_WINDOWS
- /* call the previous signal handler: it is called if we use sigaction()
- thanks to SA_NODEFER flag, otherwise it is deferred */
+#ifdef MS_WINDOWS
+ if (signum == SIGSEGV) {
+ /* don't call explictly the previous handler for SIGSEGV in this signal
+ handler, because the Windows signal handler would not be called */
+ return;
+ }
+#endif
+ /* call the previous signal handler: it is called immediatly if we use
+ sigaction() thanks to SA_NODEFER flag, otherwise it is deferred */
 raise(signum);
-#else
- /* on Windows, don't call explictly the previous handler, because Windows
- signal handler would not be called */
-#endif
 }
 
 /* Install handler for fatal signals (SIGSEGV, SIGFPE, ...). */
@@ -681,8 +683,9 @@
 faulthandler_sigsegv(PyObject *self, PyObject *args)
 {
 #if defined(MS_WINDOWS)
- /* faulthandler_fatal_error() restores the previous signal handler and then
- gives back the execution flow to the program. In a normal case, the
+ /* For SIGSEGV, faulthandler_fatal_error() restores the previous signal
+ handler and then gives back the execution flow to the program (without
+ calling explicitly the previous error handler). In a normal case, the
 SIGSEGV was raised by the kernel because of a fault, and so if the
 program retries to execute the same instruction, the fault will be
 raised again.
@@ -724,13 +727,7 @@
 static PyObject *
 faulthandler_sigill(PyObject *self, PyObject *args)
 {
-#if defined(MS_WINDOWS)
- /* see faulthandler_sigsegv() for the explanation about while(1) */
- while(1)
- raise(SIGILL);
-#else
 raise(SIGILL);
-#endif
 Py_RETURN_NONE;
 }
 #endif
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

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