X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/4e0fcd85aecc3f93aa4abb3ae01e7b1ea1ea4d12..40df65fdb47e025392e2cf5cc3059d627b61ccac:/main.c diff --git a/main.c b/main.c index 48895e66..5ad21c92 100644 --- a/main.c +++ b/main.c @@ -35,6 +35,7 @@ extern int blocking_io; extern int remove_sent_files; extern int daemon_over_rsh; extern int need_messages_from_generator; +extern int kluge_around_eof; extern int do_stats; extern int log_got_error; extern int module_id; @@ -559,16 +560,19 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) send_msg(MSG_DONE, "", 0); io_flush(FULL_FLUSH); - /* Finally, we hang around until our parent kills us with a - * USR2 signal. If --delete-after was specified, we might get - * a keep-alive message over the socket, so handle that too. */ + /* Handle any keep-alive packets from the post-processing work + * that the generator does. */ if (protocol_version >= 29) { + kluge_around_eof = -1; while (read_int(f_in) == flist->count) { if (read_shortint(f_in) != ITEM_IS_NEW) break; /* Complain? */ } } + /* Finally, we hang around waiting for our parent to kills + * us with a USR2 signal. We sleep for a short time, as on + * some OSes a signal won't interrupt a sleep! */ while (1) msleep(20); } @@ -1042,6 +1046,7 @@ static RETSIGTYPE sigusr1_handler(UNUSED(int val)) static RETSIGTYPE sigusr2_handler(UNUSED(int val)) { + close_all(); if (log_got_error) _exit(RERR_PARTIAL); _exit(0); }