X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5a18b34de343eca4b5537443e9bb207d91524d7e..0b7bce2c7bf03c49f028eaf57ffff24822ec5221:/generator.c diff --git a/generator.c b/generator.c index 7735e1e7..8290e603 100644 --- a/generator.c +++ b/generator.c @@ -74,7 +74,6 @@ extern int fuzzy_basis; extern int always_checksum; extern int checksum_len; extern char *partial_dir; -extern char *basis_dir[]; extern int compare_dest; extern int copy_dest; extern int link_dest; @@ -87,6 +86,7 @@ extern int unsort_ndx; extern int max_delete; extern int force_delete; extern int one_file_system; +extern int check_for_io_err; extern struct stats stats; extern dev_t filesystem_dev; extern mode_t orig_umask; @@ -94,6 +94,7 @@ extern uid_t our_uid; extern char *backup_dir; extern char *backup_suffix; extern int backup_suffix_len; +extern char *basis_dir[MAX_BASIS_DIRS+1]; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct filter_list_struct daemon_filter_list; @@ -2236,6 +2237,10 @@ void generate_files(int f_out, const char *local_name) dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); } else dirdev = MAKEDEV(0, 0); + /* We must be sure we've had a chance to receive an I/O + * error for this directory before we delete in it. */ + while (check_for_io_err && !cur_flist->next) + wait_for_receiver(); delete_in_dir(fbuf, fp, &dirdev); } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); @@ -2336,7 +2341,7 @@ void generate_files(int f_out, const char *local_name) touch_up_dirs(dir_flist, -1); if (max_delete >= 0 && deletion_count > max_delete) { - rprintf(FINFO, + rprintf(FWARNING, "Deletions stopped due to --max-delete limit (%d skipped)\n", deletion_count - max_delete); io_error |= IOERR_DEL_LIMIT;