X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/d7205694223490eb20bb968f725859575eb8e643..e4c598c830234fe3def0bae6ba45ca54071a9ee5:/main.c diff --git a/main.c b/main.c index bef22f98..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; @@ -403,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; @@ -848,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; @@ -895,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(); @@ -1051,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 @@ -1104,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; @@ -1139,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);