aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-04-04 00:48:39 +0000
committerWayne Davison <wayned@samba.org>2005-04-04 00:48:39 +0000
commit3eeac9bc7ed328b44ca4e49a6daa0fd272c1114c (patch)
treef6ed65573edbf616cda89a916800f2255bd230dd /io.c
parent67de72bd9ba0c28e71009b838432f69955f95e31 (diff)
downloadandroid_external_rsync-3eeac9bc7ed328b44ca4e49a6daa0fd272c1114c.tar.gz
android_external_rsync-3eeac9bc7ed328b44ca4e49a6daa0fd272c1114c.tar.bz2
android_external_rsync-3eeac9bc7ed328b44ca4e49a6daa0fd272c1114c.zip
In writefd_unbuffered(), make sure that we don't look at the r_fds
variable when we're ignoring msg_fd_in.
Diffstat (limited to 'io.c')
-rw-r--r--io.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/io.c b/io.c
index 2321666d..42a6bf0c 100644
--- a/io.c
+++ b/io.c
@@ -1006,7 +1006,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,7 +1021,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;
- }
+ 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)
@@ -1032,7 +1034,7 @@ static void writefd_unbuffered(int fd,char *buf,size_t len)
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 +1044,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))