X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e384bfbdcb9c871e0d67f60238eff57d0f08b2b3..a24c687094ca7da998065c33365f6ba1168cb44d:/main.c diff --git a/main.c b/main.c index 6a4d1031..06c5e9b2 100644 --- a/main.c +++ b/main.c @@ -25,6 +25,19 @@ struct stats stats; extern int verbose; + +/**************************************************************************** +wait for a process to exit, calling io_flush while waiting +****************************************************************************/ +void wait_process(pid_t pid, int *status) +{ + while (waitpid(pid, status, WNOHANG) == 0) { + msleep(20); + io_flush(); + } + *status = WEXITSTATUS(*status); +} + static void report(int f) { time_t t = time(NULL); @@ -240,6 +253,7 @@ static void do_server_sender(int f_in, int f_out, int argc,char *argv[]) char *dir = argv[0]; extern int relative_paths; extern int recurse; + extern int remote_version; if (verbose > 2) rprintf(FINFO,"server_sender starting pid=%d\n",(int)getpid()); @@ -271,7 +285,12 @@ static void do_server_sender(int f_in, int f_out, int argc,char *argv[]) } send_files(flist,f_out,f_in); + io_flush(); report(f_out); + if (remote_version >= 24) { + /* final goodbye message */ + read_int(f_in); + } io_flush(); exit_cleanup(0); } @@ -323,6 +342,7 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) set_error_fd(error_pipe[1]); recv_files(f_in,flist,local_name,recv_pipe[1]); + io_flush(); report(f_in); write_int(recv_pipe[1],1); @@ -475,11 +495,11 @@ int client_run(int f_in, int f_out, int pid, int argc, char *argv[]) io_flush(); wait_process(pid, &status); } - report(-1); if (remote_version >= 24) { /* final goodbye message */ read_int(f_in); } + report(-1); exit_cleanup(status); }