From 7a7810aa2f14476d319eee537ba69bfe21d3a926 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Tue, 13 Oct 2009 10:45:23 -0700 Subject: [PATCH] Avoid calling send_extra_file_list() when we shouldn't. --- io.c | 21 ++++++++++++++------- sender.c | 9 ++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/io.c b/io.c index 11ec41bf..ce6495ad 100644 --- a/io.c +++ b/io.c @@ -54,6 +54,7 @@ extern int checksum_seed; extern int protocol_version; extern int remove_source_files; extern int preserve_hard_links; +extern BOOL extra_flist_sending_enabled; extern struct stats stats; extern struct file_list *cur_flist; #ifdef ICONV_OPTION @@ -520,11 +521,15 @@ static int read_timeout(int fd, char *buf, size_t len) maxfd = new_fd; } - if (am_sender && inc_recurse && !flist_eof && !defer_forwarding_messages && !cnt - && file_total - file_old_total < MAX_FILECNT_LOOKAHEAD - && file_total - file_old_total >= MIN_FILECNT_LOOKAHEAD) - tv.tv_sec = 0; - else + if (extra_flist_sending_enabled && !defer_forwarding_messages) { + if (file_total - file_old_total < MAX_FILECNT_LOOKAHEAD + && file_total - file_old_total >= MIN_FILECNT_LOOKAHEAD) + tv.tv_sec = 0; + else { + extra_flist_sending_enabled = False; + tv.tv_sec = select_timeout; + } + } else tv.tv_sec = select_timeout; tv.tv_usec = 0; @@ -537,9 +542,11 @@ static int read_timeout(int fd, char *buf, size_t len) defer_forwarding_messages = 0; exit_cleanup(RERR_SOCKETIO); } - if (am_sender && tv.tv_sec == 0) + if (extra_flist_sending_enabled && !defer_forwarding_messages) { + extra_flist_sending_enabled = False; send_extra_file_list(sock_f_out, -1); - else + extra_flist_sending_enabled = !flist_eof; + } else check_timeout(); continue; } diff --git a/sender.c b/sender.c index e3a896af..f36c41dc 100644 --- a/sender.c +++ b/sender.c @@ -32,6 +32,7 @@ extern int logfile_format_has_i; extern int csum_length; extern int append_mode; extern int io_error; +extern int flist_eof; extern int allowed_lull; extern int preserve_xattrs; extern int protocol_version; @@ -44,6 +45,8 @@ extern int write_batch; extern struct stats stats; extern struct file_list *cur_flist, *first_flist, *dir_flist; +BOOL extra_flist_sending_enabled; + /** * @file * @@ -179,12 +182,16 @@ void send_files(int f_in, int f_out) rprintf(FINFO, "send_files starting\n"); while (1) { - if (inc_recurse) + if (inc_recurse) { send_extra_file_list(f_out, MIN_FILECNT_LOOKAHEAD); + extra_flist_sending_enabled = !flist_eof; + } /* This call also sets cur_flist. */ ndx = read_ndx_and_attrs(f_in, &iflags, &fnamecmp_type, xname, &xlen); + extra_flist_sending_enabled = False; + if (ndx == NDX_DONE) { if (!am_server && INFO_GTE(PROGRESS, 2) && cur_flist) { set_current_file_index(NULL, 0); -- 2.34.1