aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2012-09-23 10:05:14 -0700
committerPaul Eggert2012-09-23 10:05:14 -0700
commit62a1d6614e574e4c1f2789515a8db0abebd837b4 (patch)
tree55e147009580669a3158b015e63d614f99b109bf /src
parent70efc5c91b6e0e8c07e576e81904eb7f5153c6ed (diff)
downloademacs-62a1d6614e574e4c1f2789515a8db0abebd837b4.tar.gz
emacs-62a1d6614e574e4c1f2789515a8db0abebd837b4.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog11
-rw-r--r--src/alloc.c1
-rw-r--r--src/emacs.c1
-rw-r--r--src/sysdep.c3
4 files changed, 13 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0448dab3cab..9300f8b7264 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
12012-09-23 Paul Eggert <eggert@cs.ucla.edu>
2
3 Do not use SA_NODEFER.
4 Problem reported by Dani Moncayo in
5 <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00557.html>.
6 * alloc.c (die):
7 * sysdep.c (emacs_abort): Do not reset signal handler.
8 * emacs.c (terminate_due_to_signal): Reset signal handler here.
9 * sysdep.c (init_signals): Do not use SA_NODEFER. It wasn't
10 wanted even on POSIXish hosts, and it doesn't work on Windows.
11
12012-09-23 Jan Djärv <jan.h.d@swipnet.se> 122012-09-23 Jan Djärv <jan.h.d@swipnet.se>
2 13
3 * xterm.c (x_term_init): Call fixup_locale before and after calling 14 * xterm.c (x_term_init): Call fixup_locale before and after calling
diff --git a/src/alloc.c b/src/alloc.c
index 3c60f685d08..923e8736a86 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6393,7 +6393,6 @@ bool suppress_checking;
6393void 6393void
6394die (const char *msg, const char *file, int line) 6394die (const char *msg, const char *file, int line)
6395{ 6395{
6396 signal (SIGABRT, SIG_DFL);
6397 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n", 6396 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
6398 file, line, msg); 6397 file, line, msg);
6399 terminate_due_to_signal (SIGABRT, INT_MAX); 6398 terminate_due_to_signal (SIGABRT, INT_MAX);
diff --git a/src/emacs.c b/src/emacs.c
index eb83a0ae9a8..cf3d50b4f86 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -285,6 +285,7 @@ static void *ns_pool;
285_Noreturn void 285_Noreturn void
286terminate_due_to_signal (int sig, int backtrace_limit) 286terminate_due_to_signal (int sig, int backtrace_limit)
287{ 287{
288 signal (sig, SIG_DFL);
288 totally_unblock_input (); 289 totally_unblock_input ();
289 290
290 /* If fatal error occurs in code below, avoid infinite recursion. */ 291 /* If fatal error occurs in code below, avoid infinite recursion. */
diff --git a/src/sysdep.c b/src/sysdep.c
index dc7f6c2ad56..f4e055c31a0 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1763,7 +1763,7 @@ init_signals (bool dumping)
1763 1763
1764 sigfillset (&process_fatal_action.sa_mask); 1764 sigfillset (&process_fatal_action.sa_mask);
1765 process_fatal_action.sa_handler = deliver_fatal_signal; 1765 process_fatal_action.sa_handler = deliver_fatal_signal;
1766 process_fatal_action.sa_flags = emacs_sigaction_flags () | SA_NODEFER; 1766 process_fatal_action.sa_flags = emacs_sigaction_flags ();
1767 1767
1768 sigfillset (&thread_fatal_action.sa_mask); 1768 sigfillset (&thread_fatal_action.sa_mask);
1769 thread_fatal_action.sa_handler = deliver_fatal_thread_signal; 1769 thread_fatal_action.sa_handler = deliver_fatal_thread_signal;
@@ -2044,7 +2044,6 @@ emacs_backtrace (int backtrace_limit)
2044void 2044void
2045emacs_abort (void) 2045emacs_abort (void)
2046{ 2046{
2047 signal (SIGABRT, SIG_DFL);
2048 terminate_due_to_signal (SIGABRT, 10); 2047 terminate_due_to_signal (SIGABRT, 10);
2049} 2048}
2050#endif 2049#endif