if (f >= 0 && recurse && !divert_dirs) {
int i, end = flist->used - 1;
/* send_if_directory() bumps flist->used, so use "end". */
-@@ -2249,7 +2399,11 @@ struct file_list *send_file_list(int f,
- * file-list to check if this is a 1-file xfer. */
- send_extra_file_list(f, 1);
- }
-- }
-+ } else
-+ flist_eof = 1;
-+
-+ if (checksum_updating && always_checksum && flist_eof)
+@@ -2253,7 +2403,7 @@ struct file_list *send_file_list(int f,
+ flist_eof = 1;
+
+ if (checksum_updating && always_checksum && flist_eof)
+- read_checksums(NULL);
+ read_checksums(NULL); /* writes any last updates */
return flist;
}
-@@ -2535,7 +2689,7 @@ void flist_free(struct file_list *flist)
-
- if (!flist->prev || !flist_cnt)
- pool_destroy(flist->file_pool);
-- else
-+ else if (flist->pool_boundary)
- pool_free_old(flist->file_pool, flist->pool_boundary);
-
- if (flist->sorted && flist->sorted != flist->files)
--- old/loadparm.c
+++ new/loadparm.c
@@ -153,6 +153,7 @@ typedef struct
/* This code is only used by the receiver when it is building
* a list of files for a delete pass. */
if (keep_dirlinks && linkname_len && flist) {
+@@ -2051,7 +2249,11 @@ struct file_list *send_file_list(int f,
+ * file-list to check if this is a 1-file xfer. */
+ send_extra_file_list(f, 1);
+ }
+- }
++ } else
++ flist_eof = 1;
++
++ if (checksum_updating && always_checksum && flist_eof)
++ read_checksums(NULL);
+
+ return flist;
+ }
--- old/ifuncs.h
+++ new/ifuncs.h
@@ -64,6 +64,12 @@ isDigit(const char *ptr)