diff --git a/src/agreement/mod.rs b/src/agreement/mod.rs index 50986c0..0dc5333 100644 --- a/src/agreement/mod.rs +++ b/src/agreement/mod.rs @@ -505,8 +505,13 @@ impl Agreement { self.estimated = Some(b); let mut step = self.send_bval(b)?; - for (sender_id, b) in self.received_term.clone() { + // Create a temporary map of received TERM messages to avoid a second mutable access to + // `self`. + let received_term = replace(&mut self.received_term, BTreeMap::new()); + for (sender_id, b) in received_term { step.extend(self.handle_term(&sender_id, b)?); + // Place the TERM message back. + self.received_term.insert(sender_id, b); if self.terminated { return Ok(step); }