Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document --max-size.
[rsync/rsync.git]
/
io.c
diff --git
a/io.c
b/io.c
index
f3ea2a6
..
50eca53
100644
(file)
--- a/
io.c
+++ b/
io.c
@@
-353,8
+353,8
@@
static void whine_about_eof(int fd)
exit_cleanup(0);
rprintf(FERROR, RSYNC_NAME ": connection unexpectedly closed "
exit_cleanup(0);
rprintf(FERROR, RSYNC_NAME ": connection unexpectedly closed "
- "(%.0f bytes re
ad so far)
\n",
- (double)stats.total_read);
+ "(%.0f bytes re
ceived so far) [%s]
\n",
+ (double)stats.total_read
, who_am_i()
);
exit_cleanup(RERR_STREAMIO);
}
exit_cleanup(RERR_STREAMIO);
}
@@
-510,7
+510,7
@@
static int read_timeout(int fd, char *buf, size_t len)
/* Don't write errors on a dead socket. */
if (fd == sock_f_in)
/* Don't write errors on a dead socket. */
if (fd == sock_f_in)
-
io_multiplexing_close
();
+
close_multiplexing_out
();
rsyserr(FERROR, errno, "read error");
exit_cleanup(RERR_STREAMIO);
}
rsyserr(FERROR, errno, "read error");
exit_cleanup(RERR_STREAMIO);
}
@@
-857,6
+857,11
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
if (msg_fd_in > maxfd)
maxfd = msg_fd_in;
}
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;
+ }
tv.tv_sec = select_timeout;
tv.tv_usec = 0;
tv.tv_sec = select_timeout;
tv.tv_usec = 0;
@@
-875,8
+880,14
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
if (msg_fd_in >= 0 && FD_ISSET(msg_fd_in, &r_fds))
read_msg_fd();
if (msg_fd_in >= 0 && FD_ISSET(msg_fd_in, &r_fds))
read_msg_fd();
- if (!FD_ISSET(fd, &w_fds))
+ if (!FD_ISSET(fd, &w_fds)) {
+ if (fd != sock_f_out && iobuf_out_cnt) {
+ no_flush--;
+ io_flush(NORMAL_FLUSH);
+ no_flush++;
+ }
continue;
continue;
+ }
n = len - total;
if (bwlimit && n > bwlimit_writemax)
n = len - total;
if (bwlimit && n > bwlimit_writemax)
@@
-895,13
+906,13
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
/* Don't try to write errors back across the stream. */
if (fd == sock_f_out)
/* Don't try to write errors back across the stream. */
if (fd == sock_f_out)
-
io_multiplexing_close
();
+
close_multiplexing_out
();
rsyserr(FERROR, errno,
rsyserr(FERROR, errno,
- "writefd_unbuffered failed to write %ld bytes: phase \"%s\"",
- (long)len, io_write_phase);
+ "writefd_unbuffered failed to write %ld bytes: phase \"%s\"
[%s]
",
+ (long)len, io_write_phase
, who_am_i()
);
/* If the other side is sending us error messages, try
* to grab any messages they sent before they died. */
/* If the other side is sending us error messages, try
* to grab any messages they sent before they died. */
- while (fd == sock_f_out &&
am_sender
) {
+ while (fd == sock_f_out &&
io_multiplexing_in
) {
io_timeout = 30;
readfd_unbuffered(sock_f_in, io_filesfrom_buf,
sizeof io_filesfrom_buf);
io_timeout = 30;
readfd_unbuffered(sock_f_in, io_filesfrom_buf,
sizeof io_filesfrom_buf);
@@
-1129,8
+1140,13
@@
int io_multiplex_write(enum msgcode code, char *buf, size_t len)
return 1;
}
return 1;
}
+void close_multiplexing_in(void)
+{
+ io_multiplexing_in = 0;
+}
+
/** Stop output multiplexing. */
/** Stop output multiplexing. */
-void
io_multiplexing_close
(void)
+void
close_multiplexing_out
(void)
{
io_multiplexing_out = 0;
}
{
io_multiplexing_out = 0;
}