@@ -2191,7 +2191,9 @@ fd_migrate_builtin_to_core_bpf( fd_exec_slot_ctx_t * slot_ctx,
2191
2191
/* Start a funk write txn */
2192
2192
fd_funkier_txn_t * parent_txn = slot_ctx -> funk_txn ;
2193
2193
fd_funkier_txn_xid_t migration_xid = fd_funkier_generate_xid ();
2194
+ fd_funkier_txn_start_write ( slot_ctx -> acc_mgr -> funk );
2194
2195
slot_ctx -> funk_txn = fd_funkier_txn_prepare ( slot_ctx -> acc_mgr -> funk , slot_ctx -> funk_txn , & migration_xid , 0UL );
2196
+ fd_funkier_txn_end_write ( slot_ctx -> acc_mgr -> funk );
2195
2197
2196
2198
/* Attempt serialization of program account. If the program is stateless, we want to create the account. Otherwise,
2197
2199
we want a writable handle to modify the existing account.
@@ -2270,13 +2272,17 @@ fd_migrate_builtin_to_core_bpf( fd_exec_slot_ctx_t * slot_ctx,
2270
2272
a BPF cache entry here because the program is technically "delayed visibility", so the program
2271
2273
should not be invokable until the next slot. The cache entry will be created at the end of the
2272
2274
block as a part of the finalize routine. */
2275
+ fd_funkier_txn_start_write ( slot_ctx -> acc_mgr -> funk );
2273
2276
fd_funkier_txn_publish_into_parent ( slot_ctx -> acc_mgr -> funk , slot_ctx -> funk_txn , 1 );
2277
+ fd_funkier_txn_end_write ( slot_ctx -> acc_mgr -> funk );
2274
2278
slot_ctx -> funk_txn = parent_txn ;
2275
2279
return ;
2276
2280
2277
2281
fail :
2278
2282
/* Cancel the in-preparation transaction and discard any in-progress changes. */
2283
+ fd_funkier_txn_start_write ( slot_ctx -> acc_mgr -> funk );
2279
2284
fd_funkier_txn_cancel ( slot_ctx -> acc_mgr -> funk , slot_ctx -> funk_txn , 0UL );
2285
+ fd_funkier_txn_end_write ( slot_ctx -> acc_mgr -> funk );
2280
2286
slot_ctx -> funk_txn = parent_txn ;
2281
2287
}
2282
2288
@@ -3603,13 +3609,15 @@ fd_runtime_block_verify_tpool( fd_exec_slot_ctx_t * slot_ctx,
3603
3609
} FD_SPAD_FRAME_END ;
3604
3610
}
3605
3611
3612
+ /* Should only be called in offline replay */
3606
3613
static int
3607
3614
fd_runtime_publish_old_txns ( fd_exec_slot_ctx_t * slot_ctx ,
3608
3615
fd_capture_ctx_t * capture_ctx ,
3609
3616
fd_tpool_t * tpool ,
3610
3617
fd_spad_t * runtime_spad ) {
3611
3618
/* Publish any transaction older than 31 slots */
3612
3619
fd_funkier_t * funk = slot_ctx -> acc_mgr -> funk ;
3620
+ fd_funkier_txn_start_write ( slot_ctx -> acc_mgr -> funk );
3613
3621
fd_funkier_txn_pool_t txnpool = fd_funkier_txn_pool ( funk , fd_funkier_wksp ( funk ) );
3614
3622
fd_epoch_bank_t * epoch_bank = fd_exec_epoch_ctx_epoch_bank ( slot_ctx -> epoch_ctx );
3615
3623
@@ -3665,6 +3673,8 @@ fd_runtime_publish_old_txns( fd_exec_slot_ctx_t * slot_ctx,
3665
3673
}
3666
3674
}
3667
3675
3676
+ fd_funkier_txn_end_write ( slot_ctx -> acc_mgr -> funk );
3677
+
3668
3678
return 0 ;
3669
3679
}
3670
3680
@@ -3819,7 +3829,9 @@ fd_runtime_block_eval_tpool( fd_exec_slot_ctx_t * slot_ctx,
3819
3829
/* Start a new funk txn. */
3820
3830
3821
3831
fd_funkier_txn_xid_t xid = { .ul = { slot_ctx -> slot_bank .slot , slot_ctx -> slot_bank .slot } };
3832
+ fd_funkier_txn_start_write ( funk );
3822
3833
slot_ctx -> funk_txn = fd_funkier_txn_prepare ( funk , slot_ctx -> funk_txn , & xid , 1 );
3834
+ fd_funkier_txn_end_write ( funk );
3823
3835
3824
3836
/* Capturing block-agnostic state in preparation for the epoch boundary */
3825
3837
uchar dump_block = capture_ctx && slot_ctx -> slot_bank .slot >= capture_ctx -> dump_proto_start_slot && capture_ctx -> dump_block_to_pb ;
0 commit comments