summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2009-01-29 14:34:16 +0000
committerChong Yidong <cyd@stupidchicken.com>2009-01-29 14:34:16 +0000
commitb793ddae6256643c03d687f6adcd1b031d1aebbc (patch)
treee32609ca119cbc0aa299844819266480dca67a47 /src
parent1d162bfe525e773fd3436522680617d60a396ab2 (diff)
downloademacs-b793ddae6256643c03d687f6adcd1b031d1aebbc.tar.gz
(pending_signals): New var.
(poll_for_input, input_available_signal, init_keyboard): Set it. (process_pending_signals): New function.
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index cae40ffd85e..8e3d51b7e77 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -91,6 +91,13 @@ volatile int interrupt_input_blocked;
during the current critical section. */
int interrupt_input_pending;
+/* This var should be (interrupt_input_pending || pending_atimers).
+ The QUIT macro checks this instead of interrupt_input_pending and
+ pending_atimers separately, to reduce code size. So, any code that
+ changes interrupt_input_pending or pending_atimers should update
+ this too. */
+int pending_signals;
+
#define KBD_BUFFER_SIZE 4096
KBOARD *initial_kboard;
@@ -2193,11 +2200,14 @@ poll_for_input (timer)
struct atimer *timer;
{
if (poll_suppress_count == 0)
+ {
#ifdef SYNC_INPUT
- interrupt_input_pending = 1;
+ interrupt_input_pending = 1;
+ pending_signals = 1;
#else
- poll_for_input_1 ();
+ poll_for_input_1 ();
#endif
+ }
}
#endif /* POLL_FOR_INPUT */
@@ -7261,6 +7271,7 @@ void
handle_async_input ()
{
interrupt_input_pending = 0;
+ pending_signals = pending_atimers;
while (1)
{
@@ -7274,6 +7285,14 @@ handle_async_input ()
}
}
+void
+process_pending_signals ()
+{
+ if (interrupt_input_pending)
+ handle_async_input ();
+ do_pending_atimers ();
+}
+
#ifdef SIGIO /* for entire page */
/* Note SIGIO has been undef'd if FIONREAD is missing. */
@@ -7291,6 +7310,7 @@ input_available_signal (signo)
#ifdef SYNC_INPUT
interrupt_input_pending = 1;
+ pending_signals = 1;
#else
SIGNAL_THREAD_CHECK (signo);
#endif
@@ -11536,6 +11556,7 @@ init_keyboard ()
input_pending = 0;
interrupt_input_blocked = 0;
interrupt_input_pending = 0;
+ pending_signals = 0;
/* This means that command_loop_1 won't try to select anything the first
time through. */