From: Ian Kelling Date: Mon, 6 Jul 2015 01:14:25 +0000 (-0700) Subject: Avoid returning early reading process output due to SIGIO X-Git-Tag: emacs-25.0.90~1553 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f469c17b9c869b400b3515535b2f1fd9dd00f9a0;p=emacs.git Avoid returning early reading process output due to SIGIO * src/process.c (wait_reading_process_output): Extend the behavior of not breaking due to not finding output when a timer has lowered the timeout to include when SIGIO lowers the timeout. --- diff --git a/src/process.c b/src/process.c index 8e046a6dd11..8a8dad793ad 100644 --- a/src/process.c +++ b/src/process.c @@ -4960,12 +4960,18 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, if (nfds == 0) { + /* Exit the main loop if we've passed the requested timeout, + or aren't skipping processes and got some output and + haven't lowered our timeout due to timers or SIGIO and + have waited a long amount of time due to repeated + timers. */ struct timespec now = current_timespec (); - if ((timeout.tv_sec == 0 && timeout.tv_nsec == 0) + if (wait < TIMEOUT || (wait == TIMEOUT && timespec_cmp (end_time, now) <= 0) || (!process_skipped && got_some_output > 0 && (!timespec_valid_p (got_output_end_time) - || timespec_cmp (got_output_end_time, now) <= 0))) + || timespec_cmp (got_output_end_time, now) <= 0) + && (timeout.tv_sec > 0 || timeout.tv_nsec > 0))) break; }