use ref for new_from_parent; test that transactions don't leak to parent

This commit is contained in:
Anatoly Yakovenko 2019-02-17 13:14:34 -08:00 committed by Greg Fitzgerald
parent 8166925f04
commit 54dfe708c1
3 changed files with 8 additions and 7 deletions

View File

@ -117,10 +117,10 @@ impl Bank {
bank
}
pub fn new_from_parent(parent: Arc<Bank>) -> Self {
pub fn new_from_parent(parent: &Arc<Bank>) -> Self {
let mut bank = Self::default();
bank.last_id_queue = RwLock::new(parent.last_id_queue.read().unwrap().clone());
bank.parent = Some(parent);
bank.parent = Some(parent.clone());
bank
}
@ -1097,7 +1097,7 @@ mod tests {
let (genesis_block, _) = GenesisBlock::new(1);
let parent = Arc::new(Bank::new(&genesis_block));
let bank = Bank::new_from_parent(parent.clone());
let bank = Bank::new_from_parent(&parent);
assert!(Arc::ptr_eq(&bank.parents()[0], &parent));
}
@ -1116,7 +1116,7 @@ mod tests {
0,
);
assert_eq!(parent.process_transaction(&tx), Ok(()));
let bank = Bank::new_from_parent(parent);
let bank = Bank::new_from_parent(&parent);
assert_eq!(
bank.process_transaction(&tx),
Err(BankError::DuplicateSignature)
@ -1139,9 +1139,10 @@ mod tests {
0,
);
assert_eq!(parent.process_transaction(&tx), Ok(()));
let bank = Bank::new_from_parent(parent);
let bank = Bank::new_from_parent(&parent);
let tx = SystemTransaction::new_move(&key1, key2.pubkey(), 1, genesis_block.last_id(), 0);
assert_eq!(bank.process_transaction(&tx), Ok(()));
assert_eq!(parent.get_signature_status(&tx.signatures[0]), None);
}
}

View File

@ -64,7 +64,7 @@ mod tests {
let bank = Bank::default();
let finalized_bank_id = bank.tick_height();
let mut bank_forks = BankForks::new(bank);
let child_bank = Bank::new_from_parent(bank_forks.working_bank());
let child_bank = Bank::new_from_parent(&bank_forks.working_bank());
child_bank.register_tick(&Hash::default());
let child_bank_id = bank_forks.insert(child_bank);
bank_forks.set_working_bank_id(child_bank_id);

View File

@ -363,7 +363,7 @@ impl Fullnode {
}
None => FullnodeReturnType::LeaderToLeaderRotation, // value doesn't matter here...
};
let tpu_bank = Arc::new(Bank::new_from_parent(self.bank.clone()));
let tpu_bank = Arc::new(Bank::new_from_parent(&self.bank));
self.node_services.tpu.switch_to_leader(
&tpu_bank,
PohServiceConfig::default(),