diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index c6294d192d..6d2b931b2e 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -199,17 +199,11 @@ impl Accounts { )) } - pub fn new_from_parent(parent: &Accounts, slot: Slot, parent_slot: Slot) -> Self { - let accounts_db = parent.accounts_db.clone(); - accounts_db.insert_default_bank_hash_stats(slot, parent_slot); - Self::new(accounts_db) - } - pub(crate) fn new_empty(accounts_db: AccountsDb) -> Self { Self::new(Arc::new(accounts_db)) } - fn new(accounts_db: Arc) -> Self { + pub(crate) fn new(accounts_db: Arc) -> Self { Self { accounts_db, account_locks: Mutex::new(AccountLocks::default()), diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 8bbb470883..6fae80c891 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -4978,10 +4978,10 @@ impl AccountsDb { /// Insert a default bank hash stats for `slot` /// /// This fn is called when creating a new bank from parent. - pub fn insert_default_bank_hash_stats(&self, slot: Slot, parent_slot: Slot) { + pub(crate) fn insert_default_bank_hash_stats(&self, slot: Slot, parent_slot: Slot) { let mut bank_hash_stats = self.bank_hash_stats.lock().unwrap(); if bank_hash_stats.get(&slot).is_some() { - error!( "set_hash: already exists; multiple forks with shared slot {slot} as child (parent: {parent_slot})!?"); + error!("set_hash: already exists; multiple forks with shared slot {slot} as child (parent: {parent_slot})!?"); return; } bank_hash_stats.insert(slot, BankHashStats::default()); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 8308ddc21d..9cd4dae4e0 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -1492,15 +1492,15 @@ impl Bank { let epoch_schedule = parent.epoch_schedule; let epoch = epoch_schedule.get_epoch(slot); - let (rc, bank_rc_creation_time_us) = measure_us!(BankRc { - accounts: Arc::new(Accounts::new_from_parent( - &parent.rc.accounts, + let (rc, bank_rc_creation_time_us) = measure_us!({ + let accounts_db = Arc::clone(&parent.rc.accounts.accounts_db); + accounts_db.insert_default_bank_hash_stats(slot, parent.slot()); + BankRc { + accounts: Arc::new(Accounts::new(accounts_db)), + parent: RwLock::new(Some(Arc::clone(parent))), slot, - parent.slot(), - )), - parent: RwLock::new(Some(parent.clone())), - slot, - bank_id_generator: parent.rc.bank_id_generator.clone(), + bank_id_generator: Arc::clone(&parent.rc.bank_id_generator), + } }); let (status_cache, status_cache_time_us) = measure_us!(Arc::clone(&parent.status_cache));