]> git.eshelyaron.com Git - emacs.git/commitdiff
* (interrupt_signal): Make emergency exit work on MSDOS
authorEli Zaretskii <eliz@gnu.org>
Thu, 16 Jan 1997 13:12:51 +0000 (13:12 +0000)
committerEli Zaretskii <eliz@gnu.org>
Thu, 16 Jan 1997 13:12:51 +0000 (13:12 +0000)
frames.  Block further SIGINTs while `interrupt_signal' runs.

src/keyboard.c

index ebe32821a2883a75034759ecb0a45b4ac3469012..c0f46fbad13c302541edf2c71ea3735adb6d98d0 100644 (file)
@@ -7462,11 +7462,17 @@ interrupt_signal (signalnum)    /* If we don't have an argument, */
 
   cancel_echoing ();
 
-  if (!NILP (Vquit_flag) && FRAME_TERMCAP_P (selected_frame))
+  if (!NILP (Vquit_flag)
+      && (FRAME_TERMCAP_P (selected_frame) || FRAME_MSDOS_P (selected_frame)))
     {
+      /* If SIGINT isn't blocked, don't let us be interrupted by
+        another SIGINT, it might be harmful due to non-reentrancy
+        in I/O functions.  */
+      sigblock (sigmask (SIGINT));
+
       fflush (stdout);
       reset_sys_modes ();
-      sigfree ();
+
 #ifdef SIGTSTP                 /* Support possible in later USG versions */
 /*
  * On systems which can suspend the current process and return to the original
@@ -7545,6 +7551,7 @@ interrupt_signal (signalnum)      /* If we don't have an argument, */
 #endif /* not MSDOS */
       fflush (stdout);
       init_sys_modes ();
+      sigfree ();
     }
   else
     {