From: Eli Zaretskii Date: Thu, 16 Jan 1997 13:12:51 +0000 (+0000) Subject: * (interrupt_signal): Make emergency exit work on MSDOS X-Git-Tag: emacs-20.1~3071 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=31e4e97b5b01a2f37c1d3a4f6241d954dac34de4;p=emacs.git * (interrupt_signal): Make emergency exit work on MSDOS frames. Block further SIGINTs while `interrupt_signal' runs. --- diff --git a/src/keyboard.c b/src/keyboard.c index ebe32821a28..c0f46fbad13 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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 {