A better way to count our queued workload.
authorWayne Davison <wayned@samba.org>
Sat, 3 Nov 2007 16:30:30 +0000 (16:30 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 3 Nov 2007 16:30:30 +0000 (16:30 +0000)
flist.c
generator.c

diff --git a/flist.c b/flist.c
index 429238a..4d81f15 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -1657,19 +1657,17 @@ void send_extra_file_list(int f, int at_least)
        struct file_list *flist;
        int64 start_write;
        uint16 prev_flags;
-       int future_cnt, save_io_error = io_error;
+       int old_cnt, save_io_error = io_error;
 
        if (flist_eof)
                return;
 
        /* Keep sending data until we have the requested number of
         * files in the upcoming file-lists. */
-       if (cur_flist->next) {
-               flist = first_flist->prev; /* the newest flist */
-               future_cnt = flist->ndx_end - cur_flist->next->ndx_start + 1;
-       } else
-               future_cnt = 0;
-       while (future_cnt < at_least) {
+       old_cnt = cur_flist->used;
+       for (flist = first_flist; flist != cur_flist; flist = flist->next)
+               old_cnt += flist->used;
+       while (file_total - old_cnt < at_least) {
                struct file_struct *file = dir_flist->sorted[send_dir_ndx];
                int dir_ndx, dstart = dir_count;
                const char *pathname = F_PATHNAME(file);
@@ -1730,7 +1728,6 @@ void send_extra_file_list(int f, int at_least)
                flist_done_allocating(flist);
 
                file_total += flist->used;
-               future_cnt += flist->used;
                stats.flist_size += stats.total_written - start_write;
                stats.num_files += flist->used;
                if (verbose > 3)
index 24435ea..db0824d 100644 (file)
@@ -2027,14 +2027,8 @@ void generate_files(int f_out, const char *local_name)
        do {
 #ifdef SUPPORT_HARD_LINKS
                if (preserve_hard_links && inc_recurse) {
-                       while (!flist_eof) {
-                               int cnt = first_flist->prev
-                                       ? first_flist->prev->ndx_end - first_flist->ndx_start + 1
-                                       : first_flist->ndx_end - first_flist->ndx_start + 1;
-                               if (cnt >= FILECNT_LOOKAHEAD/2)
-                                       break;
+                       while (!flist_eof && file_total < FILECNT_LOOKAHEAD/2)
                                wait_for_receiver();
-                       }
                }
 #endif