diff options
| author | Paul Eggert | 2012-09-23 10:05:14 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-09-23 10:05:14 -0700 |
| commit | 62a1d6614e574e4c1f2789515a8db0abebd837b4 (patch) | |
| tree | 55e147009580669a3158b015e63d614f99b109bf /src | |
| parent | 70efc5c91b6e0e8c07e576e81904eb7f5153c6ed (diff) | |
| download | emacs-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/ChangeLog | 11 | ||||
| -rw-r--r-- | src/alloc.c | 1 | ||||
| -rw-r--r-- | src/emacs.c | 1 | ||||
| -rw-r--r-- | src/sysdep.c | 3 |
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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-09-23 Jan Djärv <jan.h.d@swipnet.se> | 12 | 2012-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; | |||
| 6393 | void | 6393 | void |
| 6394 | die (const char *msg, const char *file, int line) | 6394 | die (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 |
| 286 | terminate_due_to_signal (int sig, int backtrace_limit) | 286 | terminate_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) | |||
| 2044 | void | 2044 | void |
| 2045 | emacs_abort (void) | 2045 | emacs_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 |