diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 984190452a9656..be356bdca27307 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -42,25 +42,27 @@ impl ShredFetchStage { .as_ref() .map(|(_, cluster_info)| cluster_info.keypair().clone()); - // In the case of bank_forks=None, setup to accept any slot range - let mut root_bank = bank_forks.read().unwrap().root_bank(); - let mut last_root = root_bank.slot(); - let mut last_slot = std::u64::MAX; - let mut slots_per_epoch = 0; - + let (mut last_root, mut last_slot, mut slots_per_epoch) = { + let bank_forks_r = bank_forks.read().unwrap(); + let root_bank = bank_forks_r.root_bank(); + ( + root_bank.slot(), + root_bank.get_slots_in_epoch(root_bank.epoch()), + bank_forks_r.highest_slot(), + ) + }; let mut stats = ShredFetchStats::default(); for mut packet_batch in recvr { if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); - { + let root_bank = { let bank_forks_r = bank_forks.read().unwrap(); - last_root = bank_forks_r.root(); - let working_bank = bank_forks_r.working_bank(); - last_slot = working_bank.slot(); - root_bank = bank_forks_r.root_bank(); - slots_per_epoch = root_bank.get_slots_in_epoch(root_bank.epoch()); - } + last_slot = bank_forks_r.highest_slot(); + bank_forks_r.root_bank() + }; + last_root = root_bank.slot(); + slots_per_epoch = root_bank.get_slots_in_epoch(root_bank.epoch()); keypair = repair_context .as_ref() .map(|(_, cluster_info)| cluster_info.keypair().clone());