Got rid of some code from writefd_unbuffered() that was only needed
[rsync/rsync.git] / io.c
diff --git a/io.c b/io.c
index 2321666..2dd6d41 100644 (file)
--- a/io.c
+++ b/io.c
@@ -574,7 +574,7 @@ static int read_timeout(int fd, char *buf, size_t len)
                len -= n;
                ret += n;
 
-               if (io_timeout && fd == sock_f_in)
+               if (fd == sock_f_in && (io_timeout || am_generator))
                        last_io = time(NULL);
        }
 
@@ -665,6 +665,13 @@ void io_end_buffering(void)
 }
 
 
+void maybe_flush_socket(void)
+{
+       if (iobuf_out && iobuf_out_cnt && time(NULL) - last_io >= 5)
+               io_flush(NORMAL_FLUSH);
+}
+
+
 void maybe_send_keepalive(void)
 {
        if (time(NULL) - last_io >= allowed_lull) {
@@ -706,7 +713,11 @@ static int readfd_unbuffered(int fd, char *buf, size_t len)
        static size_t remaining;
        static size_t iobuf_in_ndx;
        int tag, ret = 0;
-       char line[MAXPATHLEN+1];
+#if MAXPATHLEN < 4096
+       char line[4096+1024];
+#else
+       char line[MAXPATHLEN+1024];
+#endif
 
        if (!iobuf_in || fd != sock_f_in)
                return read_timeout(fd, buf, len);
@@ -1006,7 +1017,7 @@ static void writefd_unbuffered(int fd,char *buf,size_t len)
 {
        size_t n, total = 0;
        fd_set w_fds, r_fds;
-       int maxfd, count, ret;
+       int maxfd, count, ret, using_r_fds;
        struct timeval tv;
 
        no_flush++;
@@ -1021,18 +1032,15 @@ static void writefd_unbuffered(int fd,char *buf,size_t len)
                        FD_SET(msg_fd_in,&r_fds);
                        if (msg_fd_in > maxfd)
                                maxfd = msg_fd_in;
-               }
-               if (fd != sock_f_out && iobuf_out_cnt && no_flush == 1) {
-                       FD_SET(sock_f_out, &w_fds);
-                       if (sock_f_out > maxfd)
-                               maxfd = sock_f_out;
-               }
+                       using_r_fds = 1;
+               } else
+                       using_r_fds = 0;
 
                tv.tv_sec = select_timeout;
                tv.tv_usec = 0;
 
                errno = 0;
-               count = select(maxfd + 1, msg_fd_in >= 0 ? &r_fds : NULL,
+               count = select(maxfd + 1, using_r_fds ? &r_fds : NULL,
                               &w_fds, NULL, &tv);
 
                if (count <= 0) {
@@ -1042,7 +1050,7 @@ static void writefd_unbuffered(int fd,char *buf,size_t len)
                        continue;
                }
 
-               if (msg_fd_in >= 0 && FD_ISSET(msg_fd_in, &r_fds))
+               if (using_r_fds && FD_ISSET(msg_fd_in, &r_fds))
                        read_msg_fd();
 
                if (!FD_ISSET(fd, &w_fds))
@@ -1083,7 +1091,7 @@ static void writefd_unbuffered(int fd,char *buf,size_t len)
                total += ret;
 
                if (fd == sock_f_out) {
-                       if (io_timeout)
+                       if (io_timeout || am_generator)
                                last_io = time(NULL);
                        sleep_for_bwlimit(ret);
                }