X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/37f9805dabba76b7a00bd2a0227762f6f239b598..1347d5126a4d89718544d976f64943dfa93dd8c4:/io.c diff --git a/io.c b/io.c index 25d75168..4fd1a138 100644 --- a/io.c +++ b/io.c @@ -112,14 +112,6 @@ static int read_timeout(int fd, char *buf, int len) continue; } - if (n == -1 && - (errno == EAGAIN || errno == EWOULDBLOCK)) { - /* this shouldn't happen, if it does then - sleep for a short time to prevent us - chewing too much CPU */ - u_sleep(100); - continue; - } if (n == 0) { if (eof_error) { @@ -128,6 +120,9 @@ static int read_timeout(int fd, char *buf, int len) exit_cleanup(RERR_STREAMIO); } + /* this prevents us trying to write errors on a dead socket */ + io_multiplexing_out = 0; + rprintf(FERROR,"read error: %s\n", strerror(errno)); exit_cleanup(RERR_STREAMIO); } @@ -333,7 +328,6 @@ static void writefd_unbuffered(int fd,char *buf,int len) int fd_count, count; struct timeval tv; int reading=0; - int blocked=0; no_flush++; @@ -371,16 +365,13 @@ static void writefd_unbuffered(int fd,char *buf,int len) } if (FD_ISSET(fd, &w_fds)) { - int n = (len-total)>>blocked; - int ret = write(fd,buf+total,n?n:1); + int ret, n = len-total; + + if (n > PIPE_BUF) n = PIPE_BUF; - if (ret == -1 && errno == EINTR) { - continue; - } + ret = write(fd,buf+total,n?n:1); - if (ret == -1 && - (errno == EAGAIN || errno == EWOULDBLOCK)) { - blocked++; + if (ret == -1 && errno == EINTR) { continue; } @@ -389,7 +380,6 @@ static void writefd_unbuffered(int fd,char *buf,int len) exit_cleanup(RERR_STREAMIO); } - blocked = 0; total += ret; if (io_timeout)