The branch, master has been updated
       via  18217a9 Fix timeout checking in safe_read().
       via  090ef59 Change safe_read() to select() before reading.
      from  708db6f Git rid of uneeded extern.

;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 18217a94c488b29aa8048d8626461cf82fd4ebae
Author: Wayne Davison <way...@samba.org>
Date:   Sat Nov 9 10:49:59 2013 -0800

    Fix timeout checking in safe_read().

commit 090ef59b29403fbe77a7a3aa2042efd8a628c673
Author: Wayne Davison <way...@samba.org>
Date:   Sat Nov 9 10:32:44 2013 -0800

    Change safe_read() to select() before reading.

-----------------------------------------------------------------------

Summary of changes:
 io.c |   35 +++++++++--------------------------
 1 files changed, 9 insertions(+), 26 deletions(-)


Changeset truncated at 500 lines:

diff --git a/io.c b/io.c
index 3036903..2a87919 100644
--- a/io.c
+++ b/io.c
@@ -155,7 +155,7 @@ static void read_a_msg(void);
 static void drain_multiplex_messages(void);
 static void sleep_for_bwlimit(int bytes_written);
 
-static void check_timeout(BOOL allow_keepalive)
+static void check_timeout(BOOL allow_keepalive, int keepalive_flags)
 {
        time_t t, chk;
 
@@ -177,7 +177,7 @@ static void check_timeout(BOOL allow_keepalive)
 
        if (allow_keepalive) {
                /* This may put data into iobuf.msg w/o flushing. */
-               maybe_send_keepalive(t, 0);
+               maybe_send_keepalive(t, keepalive_flags);
        }
 
        if (!last_io_in)
@@ -232,28 +232,10 @@ static NORETURN void whine_about_eof(BOOL allow_kluge)
  * the socket except very early in the transfer. */
 static size_t safe_read(int fd, char *buf, size_t len)
 {
-       size_t got;
-       int n;
+       size_t got = 0;
 
        assert(fd != iobuf.in_fd);
 
-       n = read(fd, buf, len);
-       if ((size_t)n == len || n == 0) {
-               if (DEBUG_GTE(IO, 2))
-                       rprintf(FINFO, "[%s] safe_read(%d)=%ld\n", who_am_i(), 
fd, (long)n);
-               return n;
-       }
-       if (n < 0) {
-               if (errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN) {
-                 read_failed:
-                       rsyserr(FERROR, errno, "safe_read failed to read %ld 
bytes [%s]",
-                               (long)len, who_am_i());
-                       exit_cleanup(RERR_STREAMIO);
-               }
-               got = 0;
-       } else
-               got = n;
-
        while (1) {
                struct timeval tv;
                fd_set r_fds, e_fds;
@@ -273,8 +255,7 @@ static size_t safe_read(int fd, char *buf, size_t len)
                                        who_am_i());
                                exit_cleanup(RERR_FILEIO);
                        }
-                       if (io_timeout)
-                               maybe_send_keepalive(time(NULL), 
MSK_ALLOW_FLUSH);
+                       check_timeout(1, MSK_ALLOW_FLUSH);
                        continue;
                }
 
@@ -282,7 +263,7 @@ static size_t safe_read(int fd, char *buf, size_t len)
                        rprintf(FINFO, "select exception on fd %d\n", fd); */
 
                if (FD_ISSET(fd, &r_fds)) {
-                       n = read(fd, buf + got, len - got);
+                       int n = read(fd, buf + got, len - got);
                        if (DEBUG_GTE(IO, 2))
                                rprintf(FINFO, "[%s] safe_read(%d)=%ld\n", 
who_am_i(), fd, (long)n);
                        if (n == 0)
@@ -290,7 +271,9 @@ static size_t safe_read(int fd, char *buf, size_t len)
                        if (n < 0) {
                                if (errno == EINTR)
                                        continue;
-                               goto read_failed;
+                               rsyserr(FERROR, errno, "safe_read failed to 
read %ld bytes [%s]",
+                                       (long)len, who_am_i());
+                               exit_cleanup(RERR_STREAMIO);
                        }
                        if ((got += (size_t)n) == len)
                                break;
@@ -768,7 +751,7 @@ static char *perform_io(size_t needed, int flags)
                                send_extra_file_list(sock_f_out, -1);
                                extra_flist_sending_enabled = !flist_eof;
                        } else
-                               check_timeout((flags & PIO_NEED_INPUT) != 0);
+                               check_timeout((flags & PIO_NEED_INPUT) != 0, 0);
                        FD_ZERO(&r_fds); /* Just in case... */
                        FD_ZERO(&w_fds);
                }


-- 
The rsync repository.
_______________________________________________
rsync-cvs mailing list
rsync-cvs@lists.samba.org
https://lists.samba.org/mailman/listinfo/rsync-cvs

Reply via email to