Commit c95f1aa9 authored by Andrew Tridgell's avatar Andrew Tridgell

prioritise reading over writing in the select loop. (this is another

ssh-friendly attempt)
parent 86ffe37f
...@@ -323,14 +323,15 @@ static void writefd_unbuffered(int fd,char *buf,int len) ...@@ -323,14 +323,15 @@ static void writefd_unbuffered(int fd,char *buf,int len)
no_flush++; no_flush++;
reading = (buffer_f_in != -1 && read_buffer_len < MAX_READ_BUFFER);
while (total < len) { while (total < len) {
FD_ZERO(&w_fds); FD_ZERO(&w_fds);
FD_ZERO(&r_fds); FD_ZERO(&r_fds);
FD_SET(fd,&w_fds); FD_SET(fd,&w_fds);
fd_count = fd+1; fd_count = fd+1;
reading = (buffer_f_in != -1 &&
read_buffer_len < MAX_READ_BUFFER);
if (reading) { if (reading) {
FD_SET(buffer_f_in,&r_fds); FD_SET(buffer_f_in,&r_fds);
if (buffer_f_in > fd) if (buffer_f_in > fd)
...@@ -350,6 +351,10 @@ static void writefd_unbuffered(int fd,char *buf,int len) ...@@ -350,6 +351,10 @@ static void writefd_unbuffered(int fd,char *buf,int len)
continue; continue;
} }
if (reading && FD_ISSET(buffer_f_in, &r_fds)) {
read_check(buffer_f_in);
}
if (FD_ISSET(fd, &w_fds)) { if (FD_ISSET(fd, &w_fds)) {
int n = (len-total)>>blocked; int n = (len-total)>>blocked;
int ret = write(fd,buf+total,n?n:1); int ret = write(fd,buf+total,n?n:1);
...@@ -377,10 +382,6 @@ static void writefd_unbuffered(int fd,char *buf,int len) ...@@ -377,10 +382,6 @@ static void writefd_unbuffered(int fd,char *buf,int len)
last_io = time(NULL); last_io = time(NULL);
continue; continue;
} }
if (reading && FD_ISSET(buffer_f_in, &r_fds)) {
read_check(buffer_f_in);
}
} }
no_flush--; no_flush--;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment