X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0dd2310cac470e16306aef6c262a9f76b62545d3..705132bceed54d18fb38aefa3f976b4c402cb7b8:/flist.c diff --git a/flist.c b/flist.c index d0777d23..622fb4e6 100644 --- a/flist.c +++ b/flist.c @@ -52,6 +52,7 @@ extern int preserve_hard_links; extern int preserve_devices; extern int preserve_specials; extern int missing_args; +extern int sock_f_in; extern int uid_ndx; extern int gid_ndx; extern int eol_nulls; @@ -2092,6 +2093,13 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) full_fname(argv[0])); exit_cleanup(RERR_FILESELECT); } + if (protocol_version == 30) { + /* Older protocols send the files-from data w/o packaging it in + * multiplexed I/O packets, but protocol 30 messed up and did + * this after starting multiplexing. We'll temporarily switch + * to buffered I/O to match this behavior. */ + io_end_multiplex_in(MPLX_TO_BUFFERED); + } use_ff_fd = 1; } @@ -2297,6 +2305,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) send_file_name(f, flist, fbuf, &st, flags, NO_FILTERS); } + if (use_ff_fd && protocol_version == 30) + io_start_multiplex_in(sock_f_in); + gettimeofday(&end_tv, NULL); stats.flist_buildtime = (int64)(end_tv.tv_sec - start_tv.tv_sec) * 1000 + (end_tv.tv_usec - start_tv.tv_usec) / 1000; @@ -2352,7 +2363,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) send_msg_int(MSG_IO_ERROR, io_error); if (disable_buffering) - io_end_buffering_out(True); + io_end_buffering_out(IOBUF_FREE_BUFS); stats.flist_size = stats.total_written - start_write; stats.num_files = flist->used;