From 31e4e97b5b01a2f37c1d3a4f6241d954dac34de4 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 16 Jan 1997 13:12:51 +0000 Subject: [PATCH] * (interrupt_signal): Make emergency exit work on MSDOS frames. Block further SIGINTs while `interrupt_signal' runs. --- src/keyboard.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 { -- 2.39.2