extern pid_t cleanup_child_pid;
extern size_t bwlimit_writemax;
extern unsigned int module_dirlen;
+extern BOOL we_send_keepalive_messages;
extern BOOL flist_receiving_enabled;
extern BOOL shutting_down;
extern struct stats stats;
uid_t our_uid;
gid_t our_gid;
-int am_generator = 0;
+int am_receiver = 0; /* Only set to 1 after the receiver/generator fork. */
+int am_generator = 0; /* Only set to 1 after the receiver/generator fork. */
int local_server = 0;
int daemon_over_rsh = 0;
mode_t orig_umask = 0;
int *f_in_p, int *f_out_p)
{
int i, argc = 0;
- char *args[MAX_ARGS];
+ char *args[MAX_ARGS], *need_to_free = NULL;
pid_t pid;
int dash_l_set = 0;
cmd = rsh_env;
if (!cmd)
cmd = RSYNC_RSH;
- cmd = strdup(cmd); /*MEMORY LEAK*/
+ cmd = need_to_free = strdup(cmd);
if (!cmd)
goto oom;
send_protected_args(*f_out_p, args);
}
+ if (need_to_free)
+ free(need_to_free);
+
return pid;
oom:
struct file_list *flist;
char *dir = argv[0];
+ we_send_keepalive_messages = io_timeout != 0 && protocol_version < 31;
+
if (DEBUG_GTE(SEND, 1)) {
rprintf(FINFO, "server_sender starting pid=%ld\n",
(long)getpid());
}
if (pid == 0) {
+ am_receiver = 1;
send_msgs_to_gen = am_server;
close(error_pipe[0]);
}
am_generator = 1;
+ we_send_keepalive_messages = io_timeout != 0;
flist_receiving_enabled = True;
io_end_multiplex_in(MPLX_SWITCHING);
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
+ we_send_keepalive_messages = io_timeout != 0 && protocol_version < 31;
if (always_checksum
&& (log_format_has(stdout_format, 'C')