# HG changeset patch # User Richard M. Stallman # Date 830291553 0 # Node ID fb0f2804c34a2f6dda0128820a39af7e614ef6e1 # Parent dc10bb3b05e24d2fe18d4916b153f096f84a613a (wait_reading_process_input, both definitions): If wait_for_cell, don't call timer_check, and use detect_input_pending instead of detect_input_pending_run_timers. diff -r dc10bb3b05e2 -r fb0f2804c34a src/process.c --- a/src/process.c Tue Apr 23 15:30:28 1996 +0000 +++ b/src/process.c Tue Apr 23 20:32:33 1996 +0000 @@ -2078,11 +2078,11 @@ EMACS_SET_SECS_USECS (timeout, 100000, 0); } - /* If our caller will not immediately handle keyboard events, - run timer events directly. - (Callers that will immediately read keyboard events - call timer_delay on their own.) */ - if (1) + /* Normally we run timers here. + But not if wait_for_cell; in those cases, + the wait is supposed to be short, + and those callers cannot handle running arbitrary Lisp code here. */ + if (! wait_for_cell) { EMACS_TIME timer_delay; int old_timers_run; @@ -2248,7 +2248,7 @@ /* If there is any, return immediately to give it higher priority than subprocesses */ - if ((XINT (read_kbd) != 0 || wait_for_cell) + if ((XINT (read_kbd) != 0) && detect_input_pending_run_timers (do_display)) { swallow_events (do_display); @@ -2256,6 +2256,20 @@ break; } + /* If wait_for_cell. check for keyboard input + but don't run any timers. + ??? (It seems wrong to me to check for keyboard + input at all when wait_for_cell, but the code + has been this way since July 1994. + Try changing this after version 19.31.) */ + if (wait_for_cell + && detect_input_pending ()) + { + swallow_events (do_display); + if (detect_input_pending ()) + break; + } + /* Exit now if the cell we're waiting for became non-nil. */ if (wait_for_cell && ! NILP (*wait_for_cell)) break; @@ -3903,7 +3917,7 @@ run timer events directly. (Callers that will immediately read keyboard events call timer_delay on their own.) */ - if (1) + if (! wait_for_cell) { EMACS_TIME timer_delay; int old_timers_run; @@ -3995,7 +4009,7 @@ /* Check for keyboard input */ - if ((XINT (read_kbd) != 0 || wait_for_cell) + if ((XINT (read_kbd) != 0) && detect_input_pending_run_timers (do_display)) { swallow_events (do_display); @@ -4003,6 +4017,20 @@ break; } + /* If wait_for_cell. check for keyboard input + but don't run any timers. + ??? (It seems wrong to me to check for keyboard + input at all when wait_for_cell, but the code + has been this way since July 1994. + Try changing this after version 19.31.) */ + if (wait_for_cell + && detect_input_pending ()) + { + swallow_events (do_display); + if (detect_input_pending ()) + break; + } + /* Exit now if the cell we're waiting for became non-nil. */ if (wait_for_cell && ! NILP (*wait_for_cell)) break;