The unified diff between revisions [2227bef1..] and [b64977b0..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "netsync.cc"
#  from [2158f0f1f9e8f5e83aa4a5dfefa05d104bdb0a0e]
#    to [9f4f8044de6b3c6d3f63265d5bbf23cc41a2a768]
#
============================================================
--- netsync.cc	2158f0f1f9e8f5e83aa4a5dfefa05d104bdb0a0e
+++ netsync.cc	9f4f8044de6b3c6d3f63265d5bbf23cc41a2a768
@@ -3796,7 +3796,10 @@ ancestry_fetcher::request_rev_file_delta
 ancestry_fetcher::request_rev_file_deltas(file_id const & start)
 {
   stack< file_id > frontier;
+  set<file_id> done_files;
+
   frontier.push(start);
+  done_files.insert(start);

   while (!frontier.empty())
     {
@@ -3825,7 +3828,11 @@ ancestry_fetcher::request_rev_file_delta
               L(F("already have file %s, not requesting rev delta")
                 % parent);
             }
-          frontier.push(parent);
+          if (done_files.find(parent) == done_files.end())
+            {
+              frontier.push(parent);
+              done_files.insert(parent);
+            }
         }
     }
 }
@@ -3870,7 +3877,10 @@ ancestry_fetcher::request_rev_manifest_d
 ancestry_fetcher::request_rev_manifest_deltas(manifest_id const & start)
 {
   stack< manifest_id > frontier;
+  set< manifest_id > done_manifests;
+
   frontier.push(start);
+  done_manifests.insert(start);

   while (!frontier.empty())
     {
@@ -3899,7 +3909,11 @@ ancestry_fetcher::request_rev_manifest_d
               L(F("already have manifest %s, not requesting rev delta")
                 % parent);
             }
-          frontier.push(parent);
+          if (done_manifests.find(parent) == done_manifests.end())
+            {
+              frontier.push(parent);
+              done_manifests.insert(parent);
+            }
         }
     }
 }