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);
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());
}
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);
}
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);
io_flush();
wait_process(pid, &status);
}
- report(-1);
if (remote_version >= 24) {
/* final goodbye message */
read_int(f_in);
}
+ report(-1);
exit_cleanup(status);
}