]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't abort when terminated by SIGINT in -batch
authorEli Zaretskii <eliz@gnu.org>
Fri, 4 Dec 2020 14:47:49 +0000 (16:47 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 4 Dec 2020 14:47:49 +0000 (16:47 +0200)
* src/xdisp.c (clear_message_stack): New function.
* src/emacs.c (terminate_due_to_signal): Call clear_message_stack
when we are being shut down by SIGINT under -batch.
* src/lisp.h (clear_message_stack): Add prototype.

src/emacs.c
src/lisp.h
src/xdisp.c

index 172e4607694264c1e95d2b66f7075d22c9ce6c94..d1b010ec7fe2cf8a36add17bfaec2df85ed5328e 100644 (file)
@@ -386,7 +386,14 @@ terminate_due_to_signal (int sig, int backtrace_limit)
 
           totally_unblock_input ();
           if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
-            Fkill_emacs (make_fixnum (sig));
+           {
+             /* Avoid abort in shut_down_emacs if we were interrupted
+                by SIGINT in noninteractive usage, as in that case we
+                don't care about the message stack.  */
+             if (sig == SIGINT && noninteractive)
+               clear_message_stack ();
+             Fkill_emacs (make_fixnum (sig));
+           }
 
           shut_down_emacs (sig, Qnil);
           emacs_backtrace (backtrace_limit);
index a95913c4efe8ebce17fba159eff1d71d28f31c42..9901f80b51cade020c718ddea92dc9a0da815760 100644 (file)
@@ -3715,6 +3715,7 @@ extern Lisp_Object echo_area_buffer[2];
 extern void add_to_log (char const *, ...);
 extern void vadd_to_log (char const *, va_list);
 extern void check_message_stack (void);
+extern void clear_message_stack (void);
 extern void setup_echo_area_for_printing (bool);
 extern bool push_message (void);
 extern void pop_message_unwind (void);
index 76ef420a364df277224478daf00c78f91d64707e..ed1d4761b95d477dd214b4db0ce6ad60e8eed81f 100644 (file)
@@ -11929,8 +11929,8 @@ pop_message_unwind (void)
 
 
 /* Check that Vmessage_stack is nil.  Called from emacs.c when Emacs
-   exits.  If the stack is not empty, we have a missing pop_message
-   somewhere.  */
+   exits.  If the stack is not empty, we have a missing
+   pop_message_unwind somewhere.  */
 
 void
 check_message_stack (void)
@@ -11939,6 +11939,11 @@ check_message_stack (void)
     emacs_abort ();
 }
 
+void
+clear_message_stack (void)
+{
+  Vmessage_stack = Qnil;
+}
 
 /* Truncate to NCHARS what will be displayed in the echo area the next
    time we display it---but don't redisplay it now.  */