summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-04-30 07:51:48 +0000
committerRichard M. Stallman <rms@gnu.org>1994-04-30 07:51:48 +0000
commit241ceaf7a26610efcb7b28947af74518474f2556 (patch)
treef8be8e6e75f970c9b3df62dd4d06121d4a5d2968
parent5846638c2812ff6934f6a7cc7bf9dc051854515e (diff)
downloademacs-241ceaf7a26610efcb7b28947af74518474f2556.tar.gz
(record_asynch_buffer_change): Block SIGIO.
(force_auto_save_soon): Call record_asynch_buffer_change.
-rw-r--r--src/keyboard.c23
1 files changed, 22 insertions, 1 deletions
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