X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/20caffd2b361bcad51692998411e4cc566c04b40..e4c598c830234fe3def0bae6ba45ca54071a9ee5:/main.c diff --git a/main.c b/main.c index 407568d8..038214fd 100644 --- a/main.c +++ b/main.c @@ -29,6 +29,7 @@ extern int dry_run; extern int list_only; +extern int io_timeout; extern int am_root; extern int am_server; extern int am_sender; @@ -43,6 +44,7 @@ extern int kluge_around_eof; extern int got_xfer_error; extern int msgs2stderr; extern int module_id; +extern int read_only; extern int copy_links; extern int copy_dirlinks; extern int copy_unsafe_links; @@ -402,7 +404,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in cmd = rsh_env; if (!cmd) cmd = RSYNC_RSH; - cmd = strdup(cmd); /* MEMORY LEAK */ + cmd = strdup(cmd); /*MEMORY LEAK*/ if (!cmd) goto oom; @@ -764,7 +766,7 @@ static void do_server_sender(int f_in, int f_out, int argc, char *argv[]) exit_cleanup(RERR_SYNTAX); return; } - if (am_daemon && lp_read_only(module_id) && remove_source_files) { + if (am_daemon && read_only && remove_source_files) { rprintf(FERROR, "ERROR: --remove-%s-files cannot be used with a read-only module\n", remove_source_files == 1 ? "source" : "sent"); @@ -847,7 +849,7 @@ static int do_recv(int f_in, int f_out, char *local_name) close(error_pipe[0]); /* We can't let two processes write to the socket at one time. */ - io_end_multiplex_out(False); + io_end_multiplex_out(MPLX_SWITCHING); if (f_in != f_out) close(f_out); sock_f_out = -1; @@ -894,7 +896,7 @@ static int do_recv(int f_in, int f_out, char *local_name) am_generator = 1; - io_end_multiplex_in(False); + io_end_multiplex_in(MPLX_SWITCHING); if (write_batch && !am_server) stop_write_batch(); @@ -950,7 +952,7 @@ static void do_server_recv(int f_in, int f_out, int argc, char *argv[]) argc, (long)getpid()); } - if (am_daemon && lp_read_only(module_id)) { + if (am_daemon && read_only) { rprintf(FERROR,"ERROR: module is read only\n"); exit_cleanup(RERR_SYNTAX); return; @@ -1050,11 +1052,15 @@ void start_server(int f_in, int f_out, int argc, char *argv[]) if (protocol_version >= 23) io_start_multiplex_out(f_out); + if (am_daemon && io_timeout && protocol_version >= 31) + send_msg_int(MSG_IO_TIMEOUT, io_timeout); if (am_sender) { keep_dirlinks = 0; /* Must be disabled on the sender. */ if (need_messages_from_generator) io_start_multiplex_in(f_in); + else + io_start_buffering_in(f_in); recv_filter_list(f_in); do_server_sender(f_in, f_out, argc, argv); } else @@ -1103,6 +1109,8 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) io_start_buffering_out(f_out); if (protocol_version >= 31 || (!filesfrom_host && protocol_version >= 23)) io_start_multiplex_in(f_in); + else + io_start_buffering_in(f_in); send_filter_list(f_out); if (filesfrom_host) filesfrom_fd = f_in; @@ -1138,6 +1146,8 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) io_start_multiplex_in(f_in); if (need_messages_from_generator) io_start_multiplex_out(f_out); + else + io_start_buffering_out(f_out); } send_filter_list(read_batch ? -1 : f_out);