From c95f1aa9d32f0a47ed02f283678c546f91c15e85 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 2 Jul 1998 02:59:04 +0000 Subject: [PATCH] prioritise reading over writing in the select loop. (this is another ssh-friendly attempt) --- io.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/io.c b/io.c index 469eef3e..2575dc45 100644 --- a/io.c +++ b/io.c @@ -323,14 +323,15 @@ static void writefd_unbuffered(int fd,char *buf,int len) no_flush++; - reading = (buffer_f_in != -1 && read_buffer_len < MAX_READ_BUFFER); - while (total < len) { FD_ZERO(&w_fds); FD_ZERO(&r_fds); FD_SET(fd,&w_fds); fd_count = fd+1; + reading = (buffer_f_in != -1 && + read_buffer_len < MAX_READ_BUFFER); + if (reading) { FD_SET(buffer_f_in,&r_fds); if (buffer_f_in > fd) @@ -350,6 +351,10 @@ static void writefd_unbuffered(int fd,char *buf,int len) continue; } + if (reading && FD_ISSET(buffer_f_in, &r_fds)) { + read_check(buffer_f_in); + } + if (FD_ISSET(fd, &w_fds)) { int n = (len-total)>>blocked; int ret = write(fd,buf+total,n?n:1); @@ -377,10 +382,6 @@ static void writefd_unbuffered(int fd,char *buf,int len) last_io = time(NULL); continue; } - - if (reading && FD_ISSET(buffer_f_in, &r_fds)) { - read_check(buffer_f_in); - } } no_flush--; -- 2.34.1