diff --git a/core/src/poh_recorder.rs b/core/src/poh_recorder.rs index e188af8730..1a00af5ee2 100644 --- a/core/src/poh_recorder.rs +++ b/core/src/poh_recorder.rs @@ -238,6 +238,7 @@ impl PohRecorder { working_bank.bank.slot() ); self.start_slot = working_bank.max_tick_height / working_bank.bank.ticks_per_slot(); + self.start_tick = (self.start_slot + 1) * working_bank.bank.ticks_per_slot(); self.clear_bank(); } if e.is_err() { diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index a83d7e0782..f0609144c5 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -237,12 +237,16 @@ impl ReplayStage { ) { trace!("{} checking poh slot {}", my_id, poh_slot); if bank_forks.read().unwrap().get(poh_slot).is_none() { - let frozen = bank_forks.read().unwrap().frozen_banks(); let parent_slot = poh_recorder.lock().unwrap().start_slot(); - assert!(frozen.contains_key(&parent_slot)); - let parent = &frozen[&parent_slot]; + let parent = { + let r_bf = bank_forks.read().unwrap(); + r_bf.get(parent_slot) + .expect("start slot doesn't exist in bank forks") + .clone() + }; + assert!(parent.is_frozen()); - leader_schedule_utils::slot_leader_at(poh_slot, parent) + leader_schedule_utils::slot_leader_at(poh_slot, &parent) .map(|next_leader| { debug!( "me: {} leader {} at poh slot {}", @@ -262,7 +266,7 @@ impl ReplayStage { influxdb::Value::Integer(grace_ticks as i64), ) .to_owned(),); - let tpu_bank = Bank::new_from_parent(parent, my_id, poh_slot); + let tpu_bank = Bank::new_from_parent(&parent, my_id, poh_slot); bank_forks.write().unwrap().insert(tpu_bank); if let Some(tpu_bank) = bank_forks.read().unwrap().get(poh_slot).cloned() { assert_eq!(