diff options
author | Wayne Davison <wayned@samba.org> | 2006-05-03 16:17:46 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2006-05-03 16:17:46 +0000 |
commit | 12ccc73ae7b330c7187d88ae5c579c1882fabb34 (patch) | |
tree | 60531b859ab7aebd872cfe1cfbb82d1ae8459d88 /io.c | |
parent | ee8d9636d145ee545b66cd2490cea11ebe6a569b (diff) | |
download | android_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.c | 41 |
1 files changed, 13 insertions, 28 deletions
@@ -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); } |