diff --git a/crates/chain-state/src/chain_info.rs b/crates/chain-state/src/chain_info.rs index f01d4727198b..d9e2c03e2738 100644 --- a/crates/chain-state/src/chain_info.rs +++ b/crates/chain-state/src/chain_info.rs @@ -112,15 +112,25 @@ impl ChainInfoTracker { /// Sets the safe header of the chain. pub fn set_safe(&self, header: SealedHeader) { - self.inner.safe_block.send_modify(|h| { - let _ = h.replace(header); + self.inner.safe_block.send_if_modified(|current_header| { + if current_header.as_ref().map(SealedHeader::hash) != Some(header.hash()) { + let _ = current_header.replace(header); + return true + } + + false }); } /// Sets the finalized header of the chain. pub fn set_finalized(&self, header: SealedHeader) { - self.inner.finalized_block.send_modify(|h| { - let _ = h.replace(header); + self.inner.finalized_block.send_if_modified(|current_header| { + if current_header.as_ref().map(SealedHeader::hash) != Some(header.hash()) { + let _ = current_header.replace(header); + return true + } + + false }); }