From 62a1d6614e574e4c1f2789515a8db0abebd837b4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 23 Sep 2012 10:05:14 -0700 Subject: [PATCH] Do not use SA_NODEFER. Problem reported by Dani Moncayo in . * 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 | 11 +++++++++++ src/alloc.c | 1 - src/emacs.c | 1 + src/sysdep.c | 3 +-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0448dab3ca..9300f8b726 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2012-09-23 Paul Eggert + + Do not use SA_NODEFER. + Problem reported by Dani Moncayo in + . + * 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 * xterm.c (x_term_init): Call fixup_locale before and after calling diff --git a/src/alloc.c b/src/alloc.c index 3c60f685d0..923e8736a8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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); diff --git a/src/emacs.c b/src/emacs.c index eb83a0ae9a..cf3d50b4f8 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -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. */ diff --git a/src/sysdep.c b/src/sysdep.c index dc7f6c2ad5..f4e055c31a 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -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 -- 2.20.1