Fix removal of terminated CS instances in HB.

This commit is contained in:
Andreas Fackler 2018-07-30 15:02:20 +02:00
parent 78ab9742a9
commit 8346085fb9
1 changed files with 16 additions and 15 deletions

View File

@ -252,7 +252,7 @@ where
cs.handle_message(sender_id, message)? cs.handle_message(sender_id, message)?
}; };
let step = self.process_output(cs_step, epoch)?; let step = self.process_output(cs_step, epoch)?;
self.remove_terminated(epoch); self.remove_terminated();
Ok(step) Ok(step)
} }
@ -558,20 +558,21 @@ where
} }
/// Removes all `CommonSubset` instances from _past_ epochs that have terminated. /// Removes all `CommonSubset` instances from _past_ epochs that have terminated.
fn remove_terminated(&mut self, from_epoch: u64) { fn remove_terminated(&mut self) {
for epoch in from_epoch..self.epoch { let terminated_epochs: Vec<u64> = self
if self .common_subsets
.common_subsets .iter()
.get(&epoch) .take_while(|&(epoch, _)| *epoch < self.epoch)
.map_or(false, CommonSubset::terminated) .filter(|&(_, cs)| cs.terminated())
{ .map(|(epoch, _)| *epoch)
debug!( .collect();
"{:?} Epoch {} has terminated.", for epoch in terminated_epochs {
self.netinfo.our_uid(), debug!(
epoch "{:?} Epoch {} has terminated.",
); self.netinfo.our_uid(),
self.common_subsets.remove(&epoch); epoch
} );
self.common_subsets.remove(&epoch);
} }
} }
} }