aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2016-07-05 20:40:40 +0200
committerPaul Eggert2016-07-06 01:04:22 +0200
commita5dcc97babfcb20bd146376fec99a20b9320e9be (patch)
tree8f374359804145592a6ac7c9e035263ac022e55f
parentd4c6774f40b6ae1fad091f66e8e43913bc9a2724 (diff)
downloademacs-a5dcc97babfcb20bd146376fec99a20b9320e9be.tar.gz
emacs-a5dcc97babfcb20bd146376fec99a20b9320e9be.zip
Fix open-network-stream responsiveness
Problem reported by Christer Ekholm (Bug#23864). Backport from master. * src/process.c (wait_reading_process_output): Fix typo introduced in 2015-07-06T02:19:13Z!eggert@cs.ucla.edu when wait == INFINITY and got_output_end_time is invalid. In this case the code should break, not continue.
-rw-r--r--src/process.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/process.c b/src/process.c
index 14d7b6df1c3..05934294a04 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4911,16 +4911,22 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
4911 haven't lowered our timeout due to timers or SIGIO and 4911 haven't lowered our timeout due to timers or SIGIO and
4912 have waited a long amount of time due to repeated 4912 have waited a long amount of time due to repeated
4913 timers. */ 4913 timers. */
4914 struct timespec huge_timespec
4915 = make_timespec (TYPE_MAXIMUM (time_t), 2 * TIMESPEC_RESOLUTION);
4916 struct timespec cmp_time = huge_timespec;
4914 if (wait < TIMEOUT) 4917 if (wait < TIMEOUT)
4915 break; 4918 break;
4916 struct timespec cmp_time 4919 if (wait == TIMEOUT)
4917 = (wait == TIMEOUT 4920 cmp_time = end_time;
4918 ? end_time 4921 if (!process_skipped && got_some_output > 0
4919 : (!process_skipped && got_some_output > 0 4922 && (timeout.tv_sec > 0 || timeout.tv_nsec > 0))
4920 && (timeout.tv_sec > 0 || timeout.tv_nsec > 0)) 4923 {
4921 ? got_output_end_time 4924 if (!timespec_valid_p (got_output_end_time))
4922 : invalid_timespec ()); 4925 break;
4923 if (timespec_valid_p (cmp_time)) 4926 if (timespec_cmp (got_output_end_time, cmp_time) < 0)
4927 cmp_time = got_output_end_time;
4928 }
4929 if (timespec_cmp (cmp_time, huge_timespec) < 0)
4924 { 4930 {
4925 now = current_timespec (); 4931 now = current_timespec ();
4926 if (timespec_cmp (cmp_time, now) <= 0) 4932 if (timespec_cmp (cmp_time, now) <= 0)