# # patch "roster_merge.cc" # from [a75a7c883aab41ea368aa6c08bcc52fd94eed3eb] # to [1474015a751be0447280bd15eeea130fb420e3e6] # ======================================================================== --- roster_merge.cc a75a7c883aab41ea368aa6c08bcc52fd94eed3eb +++ roster_merge.cc 1474015a751be0447280bd15eeea130fb420e3e6 @@ -289,14 +289,31 @@ I(false); case parallel::in_left: - copy_node_forward(result, new_i->second, i.left_data()); - ++left_mi; - break; + { + node_t const & left_n = i.left_data(); + // we skip nodes that aren't in the result roster (were + // deleted in the lifecycles step above) + if (result.roster.has_node(left_n->self)) + { + copy_node_forward(result, new_i->second, left_n); + ++new_i; + } + ++left_mi; + break; + } case parallel::in_right: - copy_node_forward(result, new_i->second, i.right_data()); - ++right_mi; - break; + { + node_t const & right_n = i.right_data(); + // we skip nodes that aren't in the result roster + if (result.roster.has_node(right_n->self)) + { + copy_node_forward(result, new_i->second, right_n); + ++new_i; + } + ++right_mi; + break; + } case parallel::in_both: { @@ -403,9 +420,9 @@ } ++left_mi; ++right_mi; + ++new_i; break; } - ++new_i; } }