From 241ceaf7a26610efcb7b28947af74518474f2556 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 30 Apr 1994 07:51:48 +0000 Subject: [PATCH] (record_asynch_buffer_change): Block SIGIO. (force_auto_save_soon): Call record_asynch_buffer_change. --- src/keyboard.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/keyboard.c b/src/keyboard.c index d1cda6c6ffd..1532141c45f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -674,6 +674,8 @@ record_auto_save () force_auto_save_soon () { last_auto_save = - auto_save_interval - 1; + + record_asynch_buffer_change (); } DEFUN ("recursive-edit", Frecursive_edit, Srecursive_edit, 0, 0, "", @@ -3288,12 +3290,31 @@ gobble_input (expected) #endif } +/* Put a buffer_switch_event in the buffer + so that read_key_sequence will notice the new current buffer. */ + record_asynch_buffer_change () { struct input_event event; event.kind = buffer_switch_event; event.frame_or_window = Qnil; - kbd_buffer_store_event (&event); + + /* Make sure no interrupt happens while storing the event. */ +#ifdef SIGIO + if (interrupt_input) + { + SIGMASKTYPE mask; + mask = sigblockx (SIGIO); + kbd_buffer_store_event (&event); + sigsetmask (mask); + } + else +#endif + { + stop_polling (); + kbd_buffer_store_event (&event); + start_polling (); + } } #ifndef VMS -- 2.39.5