Fixed a hang in the inc_recurse batch-reading code.
[rsync/rsync.git] / receiver.c
index 0135e42..cd24320 100644 (file)
@@ -387,15 +387,23 @@ static int we_want_redo(int desired_ndx)
 static int gen_wants_ndx(int desired_ndx)
 {
        static int next_ndx = -1;
-       static BOOL got_eof = 0;
+       static int done_cnt = 0;
+       static BOOL got_eof = False;
+       int flist_num = first_flist->flist_num;
 
        if (got_eof)
                return 0;
 
        while (next_ndx < desired_ndx) {
+               if (inc_recurse && flist_num <= done_cnt)
+                       return 0;
                if (next_ndx >= 0)
                        no_batched_update(next_ndx, False);
                if ((next_ndx = read_int(batch_gen_fd)) < 0) {
+                       if (inc_recurse) {
+                               done_cnt++;
+                               continue;
+                       }
                        got_eof = True;
                        return 0;
                }