X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/eb0144d79b4a52be68dd975cc64149ea4bd9080f..3481bdf4938b9788dd43d98482e1cae37a1c0cc6:/main.c diff --git a/main.c b/main.c index 31d2faa6..e2d6aa7f 100644 --- a/main.c +++ b/main.c @@ -103,7 +103,11 @@ static void show_malloc_stats(void); * remember_children(), we succeed instead of returning an error. */ pid_t wait_process(pid_t pid, int *status_ptr, int flags) { - pid_t waited_pid = waitpid(pid, status_ptr, flags); + pid_t waited_pid; + + do { + waited_pid = waitpid(pid, status_ptr, flags); + } while (waited_pid == -1 && errno == EINTR); if (waited_pid == -1 && errno == ECHILD) { /* Status of requested child no longer available: check to @@ -619,7 +623,7 @@ static void read_final_goodbye(int f_in, int f_out) } } - if (i != -1) { + if (i != NDX_DONE) { rprintf(FERROR, "Invalid packet at end of run (%d) [%s]\n", i, who_am_i()); exit_cleanup(RERR_PROTOCOL); @@ -695,8 +699,10 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) * points to an identical file won't be replaced by the referent. */ copy_links = copy_dirlinks = 0; +#ifdef SUPPORT_HARD_LINKS if (preserve_hard_links) init_hard_links(); +#endif if (fd_pair(error_pipe) < 0) { rsyserr(FERROR, errno, "pipe failed in do_recv"); @@ -768,7 +774,7 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) io_flush(FULL_FLUSH); if (protocol_version >= 24) { /* send a final goodbye message */ - write_int(f_out, -1); + write_int(f_out, NDX_DONE); } io_flush(FULL_FLUSH);