aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-05-03 16:17:46 +0000
committerWayne Davison <wayned@samba.org>2006-05-03 16:17:46 +0000
commit12ccc73ae7b330c7187d88ae5c579c1882fabb34 (patch)
tree60531b859ab7aebd872cfe1cfbb82d1ae8459d88 /io.c
parentee8d9636d145ee545b66cd2490cea11ebe6a569b (diff)
downloadandroid_external_rsync-12ccc73ae7b330c7187d88ae5c579c1882fabb34.tar.gz
android_external_rsync-12ccc73ae7b330c7187d88ae5c579c1882fabb34.tar.bz2
android_external_rsync-12ccc73ae7b330c7187d88ae5c579c1882fabb34.zip
Changed read_msg_fd() to always use send_msg()/rwrite() instead of
sometimes calling io_multiplex_write()/rwrite() or msg_list_add(). This simplifies the code that does the defer_forwarding_messages checking because it can now be done in just one place, in send_msg() (because rwrite() also calls send_msg() now when forwarding a msg).
Diffstat (limited to 'io.c')
-rw-r--r--io.c41
1 files changed, 13 insertions, 28 deletions
diff --git a/io.c b/io.c
index bf464cfc..5b87be6f 100644
--- a/io.c
+++ b/io.c
@@ -267,10 +267,7 @@ static void read_msg_fd(void)
exit_cleanup(RERR_STREAMIO);
}
read_loop(fd, buf, len);
- if (defer_forwarding_messages)
- msg_list_add(&msg2sndr, MSG_DELETED, buf, len);
- else
- io_multiplex_write(MSG_DELETED, buf, len);
+ send_msg(MSG_DELETED, buf, len);
break;
case MSG_SUCCESS:
if (len != 4 || !am_generator) {
@@ -280,10 +277,7 @@ static void read_msg_fd(void)
read_loop(fd, buf, len);
if (remove_sent_files) {
decrement_active_files(IVAL(buf,0));
- if (defer_forwarding_messages)
- msg_list_add(&msg2sndr, MSG_SUCCESS, buf, len);
- else
- io_multiplex_write(MSG_SUCCESS, buf, len);
+ send_msg(MSG_SUCCESS, buf, len);
}
if (preserve_hard_links)
flist_ndx_push(&hlink_list, IVAL(buf,0));
@@ -294,7 +288,6 @@ static void read_msg_fd(void)
exit_cleanup(RERR_STREAMIO);
}
close_multiplexing_out();
- defer_forwarding_messages = 0;
/* FALL THROUGH */
case MSG_INFO:
case MSG_ERROR:
@@ -304,11 +297,7 @@ static void read_msg_fd(void)
if (n >= sizeof buf)
n = sizeof buf - 1;
read_loop(fd, buf, n);
- if (am_generator && am_server
- && defer_forwarding_messages && tag != MSG_LOG)
- msg_list_add(&msg2sndr, tag, buf, n);
- else
- rwrite((enum logcode)tag, buf, n);
+ rwrite(tag, buf, n);
len -= n;
}
break;
@@ -382,14 +371,19 @@ static int msg2genr_flush(int flush_it_all)
return 1;
}
-void send_msg(enum msgcode code, char *buf, int len)
+int send_msg(enum msgcode code, char *buf, int len)
{
if (msg_fd_out < 0) {
- io_multiplex_write(code, buf, len);
- return;
+ if (!defer_forwarding_messages)
+ return io_multiplex_write(code, buf, len);
+ if (!io_multiplexing_out)
+ return 0;
+ msg_list_add(&msg2sndr, code, buf, len);
+ return 1;
}
msg_list_add(&msg2genr, code, buf, len);
msg2genr_flush(NORMAL_FLUSH);
+ return 1;
}
int get_redo_num(int itemizing, enum logcode code)
@@ -1136,20 +1130,11 @@ static void msg2sndr_flush(void)
while (msg2sndr.head && io_multiplexing_out) {
struct msg_list_item *m = msg2sndr.head;
- int tag = *((uchar*)m->buf+3) - MPLEX_BASE;
if (!(msg2sndr.head = m->next))
msg2sndr.tail = NULL;
+ stats.total_written += m->len;
defer_forwarding_messages = 1;
- switch (tag) {
- case MSG_INFO:
- case MSG_ERROR:
- rwrite((enum logcode)tag, m->buf + 4, m->len - 4);
- break;
- default:
- stats.total_written += m->len;
- writefd_unbuffered(sock_f_out, m->buf, m->len);
- break;
- }
+ writefd_unbuffered(sock_f_out, m->buf, m->len);
defer_forwarding_messages = 0;
free(m);
}