From 6c49e5a89dd454f818e87d26aea1aeb9d6f2b4a0 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Tue, 23 Dec 2025 16:09:45 +0100 Subject: [PATCH] chore: release lock early (#20605) --- crates/chain-state/src/in_memory.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/chain-state/src/in_memory.rs b/crates/chain-state/src/in_memory.rs index 133bdf4a69..c7ec6850fe 100644 --- a/crates/chain-state/src/in_memory.rs +++ b/crates/chain-state/src/in_memory.rs @@ -86,14 +86,20 @@ impl InMemoryState { /// /// This tries to acquire a read lock. Drop any write locks before calling this. pub(crate) fn update_metrics(&self) { - let numbers = self.numbers.read(); - if let Some((earliest_block_number, _)) = numbers.first_key_value() { - self.metrics.earliest_block.set(*earliest_block_number as f64); + let (count, earliest, latest) = { + let numbers = self.numbers.read(); + let count = numbers.len(); + let earliest = numbers.first_key_value().map(|(number, _)| *number); + let latest = numbers.last_key_value().map(|(number, _)| *number); + (count, earliest, latest) + }; + if let Some(earliest_block_number) = earliest { + self.metrics.earliest_block.set(earliest_block_number as f64); } - if let Some((latest_block_number, _)) = numbers.last_key_value() { - self.metrics.latest_block.set(*latest_block_number as f64); + if let Some(latest_block_number) = latest { + self.metrics.latest_block.set(latest_block_number as f64); } - self.metrics.num_blocks.set(numbers.len() as f64); + self.metrics.num_blocks.set(count as f64); } /// Returns the state for a given block hash.