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
Refer to the rsync daemon as a "daemon", not a "server". This is
[rsync/rsync.git]
/
io.c
diff --git
a/io.c
b/io.c
index
1650073
..
fdaa713
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;
len -= n;
ret += n;
- if (
io_timeout && fd == sock_f_in
)
+ if (
fd == sock_f_in && (io_timeout || am_generator)
)
last_io = time(NULL);
}
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) {
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;
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);
if (!iobuf_in || fd != sock_f_in)
return read_timeout(fd, buf, len);
@@
-888,7
+899,7
@@
int read_vstring(int f, char *buf, int bufsize)
if (len >= bufsize) {
rprintf(FERROR, "over-long vstring received (%d > %d)\n",
len, bufsize - 1);
if (len >= bufsize) {
rprintf(FERROR, "over-long vstring received (%d > %d)\n",
len, bufsize - 1);
-
exit_cleanup(RERR_PROTOCOL)
;
+
return -1
;
}
if (len)
}
if (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;
{
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++;
struct timeval tv;
no_flush++;
@@
-1021,7
+1032,9
@@
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;
FD_SET(msg_fd_in,&r_fds);
if (msg_fd_in > maxfd)
maxfd = msg_fd_in;
- }
+ using_r_fds = 1;
+ } else
+ using_r_fds = 0;
if (fd != sock_f_out && iobuf_out_cnt && no_flush == 1) {
FD_SET(sock_f_out, &w_fds);
if (sock_f_out > maxfd)
if (fd != sock_f_out && iobuf_out_cnt && no_flush == 1) {
FD_SET(sock_f_out, &w_fds);
if (sock_f_out > maxfd)
@@
-1032,7
+1045,7
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
tv.tv_usec = 0;
errno = 0;
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) {
&w_fds, NULL, &tv);
if (count <= 0) {
@@
-1042,17
+1055,11
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
continue;
}
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();
read_msg_fd();
- if (!FD_ISSET(fd, &w_fds)) {
- if (fd != sock_f_out && iobuf_out_cnt) {
- no_flush--;
- io_flush(NORMAL_FLUSH);
- no_flush++;
- }
+ if (!FD_ISSET(fd, &w_fds))
continue;
continue;
- }
n = len - total;
if (bwlimit && n > bwlimit_writemax)
n = len - total;
if (bwlimit && n > bwlimit_writemax)
@@
-1089,7
+1096,7
@@
static void writefd_unbuffered(int fd,char *buf,size_t len)
total += ret;
if (fd == sock_f_out) {
total += ret;
if (fd == sock_f_out) {
- if (io_timeout)
+ if (io_timeout
|| am_generator
)
last_io = time(NULL);
sleep_for_bwlimit(ret);
}
last_io = time(NULL);
sleep_for_bwlimit(ret);
}