diff --git a/src/binary_agreement/binary_agreement.rs b/src/binary_agreement/binary_agreement.rs index 86e564e..8152469 100644 --- a/src/binary_agreement/binary_agreement.rs +++ b/src/binary_agreement/binary_agreement.rs @@ -258,9 +258,11 @@ impl BinaryAgreement { let received = epoch_state .entry(sender_id.clone()) .or_insert_with(ReceivedMessages::new); - Ok(received.insert(content).map_or(Step::default(), |fault| { - Fault::new(sender_id.clone(), fault).into() - })) + Ok(received + .insert(content) + .map_or_else(Step::default, |fault| { + Fault::new(sender_id.clone(), fault).into() + })) } else { self.handle_message_content(sender_id, content) } @@ -504,15 +506,12 @@ impl BinaryAgreement { self.estimated = Some(b); let sbvb_step = self.sbv_broadcast.send_bval(b)?; let mut step = self.handle_sbvb_step(sbvb_step)?; - let epoch_state = self - .incoming_queue - .remove(&self.epoch) - .into_iter() - .flatten(); + let epoch = self.epoch; + let epoch_state = self.incoming_queue.remove(&epoch).into_iter().flatten(); for (sender_id, received) in epoch_state { for m in received.messages() { step.extend(self.handle_message_content(&sender_id, m)?); - if self.decision.is_some() { + if self.decision.is_some() || self.epoch > epoch { return Ok(step); } } diff --git a/src/binary_agreement/sbv_broadcast.rs b/src/binary_agreement/sbv_broadcast.rs index bea5571..491fde7 100644 --- a/src/binary_agreement/sbv_broadcast.rs +++ b/src/binary_agreement/sbv_broadcast.rs @@ -112,12 +112,10 @@ impl SbvBroadcast { /// Upon receiving _f + 1_ `BVal(b)`, multicasts `BVal(b)`. Upon receiving _2 f + 1_ `BVal(b)`, /// updates `bin_values`. When `bin_values` gets its first entry, multicasts `Aux(b)`. pub fn handle_bval(&mut self, sender_id: &N, b: bool) -> Result> { - let count_bval = { - if !self.received_bval[b].insert(sender_id.clone()) { - return Ok(Fault::new(sender_id.clone(), FaultKind::DuplicateBVal).into()); - } - self.received_bval[b].len() - }; + if !self.received_bval[b].insert(sender_id.clone()) { + return Ok(Fault::new(sender_id.clone(), FaultKind::DuplicateBVal).into()); + } + let count_bval = self.received_bval[b].len(); let mut step = Step::default();