|
17 | 17 | transaction::{SanitizedTransaction, TransactionError, VersionedTransaction}, |
18 | 18 | }, |
19 | 19 | solana_svm::{ |
20 | | - account_loader::TransactionLoadResult, account_overrides::AccountOverrides, |
21 | | - transaction_processor::ExecutionRecordingConfig, |
| 20 | + account_loader::TransactionLoadResult, |
| 21 | + account_overrides::AccountOverrides, |
| 22 | + transaction_processor::{ExecutionRecordingConfig, TransactionProcessingCallback}, |
22 | 23 | transaction_results::TransactionExecutionResult, |
23 | 24 | }, |
24 | 25 | solana_transaction_status::{token_balances::TransactionTokenBalances, PreBalanceInfo}, |
@@ -264,6 +265,18 @@ pub fn load_and_execute_bundle<'a>( |
264 | 265 | account_overrides.upsert_account_overrides( |
265 | 266 | bank.get_account_overrides_for_simulation(&account_keys), |
266 | 267 | ); |
| 268 | + |
| 269 | + // An unfrozen bank's state is always changing. |
| 270 | + // By taking a snapshot of the accounts we're mocking out grabbing their locks. |
| 271 | + // **Note** this does not prevent race conditions, just mocks preventing them. |
| 272 | + if !bank.is_frozen() { |
| 273 | + for pk in account_keys.iter() { |
| 274 | + // Save on a disk read. |
| 275 | + if account_overrides.get(pk).is_none() { |
| 276 | + account_overrides.set_account(pk, bank.get_account_shared_data(pk)); |
| 277 | + } |
| 278 | + } |
| 279 | + } |
267 | 280 | }); |
268 | 281 | } |
269 | 282 |
|
|
0 commit comments