diff options
-rw-r--r-- | src/xterm.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/xterm.c b/src/xterm.c index fc09897de01..ae786d5058b 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -5437,18 +5437,23 @@ XTflash (f) wakeup.tv_sec += (wakeup.tv_usec / 1000000); wakeup.tv_usec %= 1000000; - /* Keep waiting until past the time wakeup. */ - while (1) + /* Keep waiting until past the time wakeup or any input gets + available. */ + while (! detect_input_pending ()) { + struct timeval current; struct timeval timeout; - EMACS_GET_TIME (timeout); + EMACS_GET_TIME (current); - /* In effect, timeout = wakeup - timeout. - Break if result would be negative. */ - if (timeval_subtract (&timeout, wakeup, timeout)) + /* Break if result would be negative. */ + if (timeval_subtract (¤t, wakeup, current)) break; + /* How long `select' should wait. */ + timeout.tv_sec = 0; + timeout.tv_usec = 10000; + /* Try to wait that long--but we might wake up sooner. */ select (0, NULL, NULL, NULL, &timeout); } |