X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e44f9a12c4c6d560f00d6e3521dca27e1d1e422a..e1b3d5c4be46ee0b17a98aa48cb7cb152c4a008b:/io.c diff --git a/io.c b/io.c index a88d76af..7909e0b1 100644 --- a/io.c +++ b/io.c @@ -24,9 +24,6 @@ */ #include "rsync.h" -static int64 total_written; -static int64 total_read; - static int io_multiplexing_out; static int io_multiplexing_in; static int multiplex_in_fd; @@ -35,17 +32,7 @@ static time_t last_io; static int eof_error=1; extern int verbose; extern int io_timeout; - - -int64 write_total(void) -{ - return total_written; -} - -int64 read_total(void) -{ - return total_read; -} +extern struct stats stats; static int buffer_f_in = -1; @@ -108,6 +95,7 @@ static int read_timeout(int fd, char *buf, int len) n = read(fd, buf, len); if (n > 0) { + stats.total_read += n; buf += n; len -= n; ret += n; @@ -120,6 +108,15 @@ 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) { rprintf(FERROR,"EOF in read_timeout\n"); @@ -267,7 +264,6 @@ int32 read_int(int f) { char b[4]; readfd(f,b,4); - total_read += 4; return IVAL(b,0); } @@ -286,7 +282,6 @@ int64 read_longint(int f) #else if (remote_version >= 16) { readfd(f,b,8); - total_read += 8; ret = IVAL(b,0) | (((int64)IVAL(b,4))<<32); } #endif @@ -297,7 +292,6 @@ int64 read_longint(int f) void read_buf(int f,char *buf,int len) { readfd(f,buf,len); - total_read += len; } void read_sbuf(int f,char *buf,int len) @@ -362,12 +356,23 @@ static void writefd_unbuffered(int fd,char *buf,int len) continue; } + if (ret == -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 (ret <= 0) { rprintf(FERROR,"erroring writing %d bytes - exiting\n", len); exit_cleanup(1); } total += ret; + stats.total_written += ret; + if (io_timeout) last_io = time(NULL); continue; @@ -446,7 +451,6 @@ void write_int(int f,int32 x) char b[4]; SIVAL(b,0,x); writefd(f,b,4); - total_written += 4; } void write_longint(int f, int64 x) @@ -464,13 +468,11 @@ void write_longint(int f, int64 x) SIVAL(b,4,((x>>32)&0xFFFFFFFF)); writefd(f,b,8); - total_written += 8; } void write_buf(int f,char *buf,int len) { writefd(f,buf,len); - total_written += len; } /* write a string to the connection */