Do not use SA_NODEFER.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 23 Sep 2012 17:05:14 +0000 (10:05 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 23 Sep 2012 17:05:14 +0000 (10:05 -0700)
Problem reported by Dani Moncayo in
<http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00557.html>.
* alloc.c (die):
* sysdep.c (emacs_abort): Do not reset signal handler.
* emacs.c (terminate_due_to_signal): Reset signal handler here.
* sysdep.c (init_signals): Do not use SA_NODEFER.  It wasn't
wanted even on POSIXish hosts, and it doesn't work on Windows.

src/ChangeLog
src/alloc.c
src/emacs.c
src/sysdep.c

index 0448dab..9300f8b 100644 (file)
@@ -1,3 +1,14 @@
+2012-09-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Do not use SA_NODEFER.
+       Problem reported by Dani Moncayo in
+       <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00557.html>.
+       * alloc.c (die):
+       * sysdep.c (emacs_abort): Do not reset signal handler.
+       * emacs.c (terminate_due_to_signal): Reset signal handler here.
+       * sysdep.c (init_signals): Do not use SA_NODEFER.  It wasn't
+       wanted even on POSIXish hosts, and it doesn't work on Windows.
+
 2012-09-23  Jan Djärv  <jan.h.d@swipnet.se>
 
        * xterm.c (x_term_init): Call fixup_locale before and after calling
index 3c60f68..923e873 100644 (file)
@@ -6393,7 +6393,6 @@ bool suppress_checking;
 void
 die (const char *msg, const char *file, int line)
 {
-  signal (SIGABRT, SIG_DFL);
   fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
           file, line, msg);
   terminate_due_to_signal (SIGABRT, INT_MAX);
index eb83a0a..cf3d50b 100644 (file)
@@ -285,6 +285,7 @@ static void *ns_pool;
 _Noreturn void
 terminate_due_to_signal (int sig, int backtrace_limit)
 {
+  signal (sig, SIG_DFL);
   totally_unblock_input ();
 
   /* If fatal error occurs in code below, avoid infinite recursion.  */
index dc7f6c2..f4e055c 100644 (file)
@@ -1763,7 +1763,7 @@ init_signals (bool dumping)
 
   sigfillset (&process_fatal_action.sa_mask);
   process_fatal_action.sa_handler = deliver_fatal_signal;
-  process_fatal_action.sa_flags = emacs_sigaction_flags () | SA_NODEFER;
+  process_fatal_action.sa_flags = emacs_sigaction_flags ();
 
   sigfillset (&thread_fatal_action.sa_mask);
   thread_fatal_action.sa_handler = deliver_fatal_thread_signal;
@@ -2044,7 +2044,6 @@ emacs_backtrace (int backtrace_limit)
 void
 emacs_abort (void)
 {
-  signal (SIGABRT, SIG_DFL);
   terminate_due_to_signal (SIGABRT, 10);
 }
 #endif