# # patch "revision.cc" # from [1f01aaf3b641cd4326c1dcefc12d5369d336dc35] # to [9a0e2a37bb86d6b46fe68e0f42f6689f42288969] # # patch "roster4.cc" # from [00d25b977bb74b70ea97f126624e2216c6856aa2] # to [cef7c85613a72c3cb080ee37b4b897342f84e1f6] # ======================================================================== --- revision.cc 1f01aaf3b641cd4326c1dcefc12d5369d336dc35 +++ revision.cc 9a0e2a37bb86d6b46fe68e0f42f6689f42288969 @@ -1087,8 +1087,9 @@ ! null_node(other_id); other_id = parent_roster->get_node(other_id)->parent) { + node_id next_nid = child_roster.get_node(nid)->parent; child_roster.replace_node_id(nid, other_id); - nid = child_roster.get_node(nid)->parent; + nid = next_nid; } I(null_node(nid)); break; @@ -1171,7 +1172,7 @@ { if (i->first != child) continue; - u64 parent = i->second; + u64 parent = i->second; if (parent_rosters.find(parent) == parent_rosters.end()) { boost::shared_ptr ros = boost::shared_ptr(new roster_t()); @@ -1255,6 +1256,16 @@ // Mark this child as done, hooray! safe_insert(done, child); + + // Extend the work queue with all the children of this child + std::pair grandchild_range = parent_to_child_map.equal_range(child); + for (ci i = grandchild_range.first; + i != grandchild_range.second; ++i) + { + if (i->first != child) + continue; + work.push_back(i->second); + } } } } ======================================================================== --- roster4.cc 00d25b977bb74b70ea97f126624e2216c6856aa2 +++ roster4.cc cef7c85613a72c3cb080ee37b4b897342f84e1f6 @@ -949,7 +949,7 @@ // but may not be worth the effort (since it doesn't take that long to // get out in any case) a.get_name(aid, sp); - node_id bid = b.get_node(aid)->self; + node_id bid = b.get_node(sp)->self; if (temp_node(bid)) { node_id new_nid = nis.next();