summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Djärv <jan.h.d@swipnet.se>2015-02-20 08:46:38 +0100
committerJan Djärv <jan.h.d@swipnet.se>2015-02-20 08:46:38 +0100
commit51d475a8d8a07e0edec92addd4bf96eb1be23b48 (patch)
tree9af2c6b00a6119845604117e189c9bd15cba6cb8
parent98cb7d9e4d7ff3e9cb8aad229e30dbd0a7963a8f (diff)
downloademacs-51d475a8d8a07e0edec92addd4bf96eb1be23b48.tar.gz
Avoid endless loop when handling fatal signal.
* src/emacs.c (terminate_due_to_signal): Move totally_unblock_input after setting fatal_error_in_progress, so gobble_input and *read_socket are not read if there are pending_signals.
-rw-r--r--src/ChangeLog6
-rw-r--r--src/emacs.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 1126dde7450..dc33e417ef4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-20 Jan Djärv <jan.h.d@swipnet.se>
+
+ * emacs.c (terminate_due_to_signal): Move totally_unblock_input after
+ setting fatal_error_in_progress, so gobble_input and *read_socket are
+ not read if there are pending_signals.
+
2015-02-20 Paul Eggert <eggert@cs.ucla.edu>
Simplify binary I/O configuration
diff --git a/src/emacs.c b/src/emacs.c
index f933eb1443d..590579907ff 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -345,13 +345,13 @@ _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. */
if (! fatal_error_in_progress)
{
fatal_error_in_progress = 1;
+ totally_unblock_input ();
if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
Fkill_emacs (make_number (sig));