@@ -735,6 +735,17 @@ publish_slot_completed( fd_replay_tile_t * ctx,
735735 ctx -> replay_out -> chunk = fd_dcache_compact_next ( ctx -> replay_out -> chunk , sizeof (fd_replay_slot_completed_t ), ctx -> replay_out -> chunk0 , ctx -> replay_out -> wmark );
736736}
737737
738+ static void
739+ publish_slot_dead ( fd_replay_tile_t * ctx ,
740+ fd_stem_context_t * stem ,
741+ fd_bank_t * bank ) {
742+ fd_replay_slot_dead_t * slot_dead = fd_chunk_to_laddr ( ctx -> replay_out -> mem , ctx -> replay_out -> chunk );
743+ slot_dead -> slot = fd_bank_slot_get ( bank );
744+ slot_dead -> block_id = ctx -> block_id_arr [ bank -> idx ].block_id ;
745+ fd_stem_publish ( stem , ctx -> replay_out -> idx , REPLAY_SIG_SLOT_DEAD , ctx -> replay_out -> chunk , sizeof (fd_replay_slot_dead_t ), 0UL , 0UL , fd_frag_meta_ts_comp ( fd_tickcount () ) );
746+ ctx -> replay_out -> chunk = fd_dcache_compact_next ( ctx -> replay_out -> chunk , sizeof (fd_replay_slot_dead_t ), ctx -> replay_out -> chunk0 , ctx -> replay_out -> wmark );
747+ }
748+
738749static void
739750replay_block_finalize ( fd_replay_tile_t * ctx ,
740751 fd_stem_context_t * stem ,
@@ -1610,8 +1621,9 @@ can_process_fec( fd_replay_tile_t * ctx ) {
16101621}
16111622
16121623static void
1613- process_fec_set ( fd_replay_tile_t * ctx ,
1614- fd_reasm_fec_t * reasm_fec ) {
1624+ process_fec_set ( fd_replay_tile_t * ctx ,
1625+ fd_stem_context_t * stem ,
1626+ fd_reasm_fec_t * reasm_fec ) {
16151627 long now = fd_log_wallclock ();
16161628
16171629 /* Linking only requires a shared lock because the fields that are
@@ -1722,7 +1734,9 @@ process_fec_set( fd_replay_tile_t * ctx,
17221734 sched_fec -> alut_ctx -> els = ctx -> published_root_slot ;
17231735
17241736 if ( FD_UNLIKELY ( !fd_sched_fec_ingest ( ctx -> sched , sched_fec ) ) ) {
1725- fd_banks_mark_bank_dead ( ctx -> banks , fd_banks_bank_query ( ctx -> banks , sched_fec -> bank_idx ) );
1737+ fd_bank_t * bank = fd_banks_bank_query ( ctx -> banks , sched_fec -> bank_idx );
1738+ publish_slot_dead ( ctx , stem , bank );
1739+ fd_banks_mark_bank_dead ( ctx -> banks , bank );
17261740 }
17271741}
17281742
@@ -1861,12 +1875,12 @@ after_credit( fd_replay_tile_t * ctx,
18611875
18621876 /* Now we can process all of the FECs. */
18631877 for ( ulong i = fec_cnt ; i > 0UL ; i -- ) {
1864- process_fec_set ( ctx , fecs [i - 1UL ] );
1878+ process_fec_set ( ctx , stem , fecs [i - 1UL ] );
18651879 }
18661880 } else {
18671881 /* Standard case. */
18681882 fec = fd_reasm_out ( ctx -> reasm );
1869- process_fec_set ( ctx , fec );
1883+ process_fec_set ( ctx , stem , fec );
18701884 }
18711885
18721886 * charge_busy = 1 ;
@@ -1915,6 +1929,7 @@ process_solcap_account_update( fd_replay_tile_t * ctx,
19151929
19161930static void
19171931process_exec_task_done ( fd_replay_tile_t * ctx ,
1932+ fd_stem_context_t * stem ,
19181933 fd_exec_task_done_msg_t * msg ,
19191934 ulong sig ) {
19201935 if ( FD_UNLIKELY ( sig == 0UL ) ) {
@@ -1945,6 +1960,7 @@ process_exec_task_done( fd_replay_tile_t * ctx,
19451960 /* Every transaction in a valid block has to execute.
19461961 Otherwise, we should mark the block as dead. Also freeze the
19471962 bank if possible. */
1963+ publish_slot_dead ( ctx , stem , bank );
19481964 fd_banks_mark_bank_dead ( ctx -> banks , bank );
19491965 fd_sched_block_abandon ( ctx -> sched , bank -> idx );
19501966 }
@@ -1959,6 +1975,7 @@ process_exec_task_done( fd_replay_tile_t * ctx,
19591975 /* Every transaction in a valid block has to sigverify.
19601976 Otherwise, we should mark the block as dead. Also freeze the
19611977 bank if possible. */
1978+ publish_slot_dead ( ctx , stem , bank );
19621979 fd_banks_mark_bank_dead ( ctx -> banks , bank );
19631980 fd_sched_block_abandon ( ctx -> sched , bank -> idx );
19641981 }
@@ -2223,7 +2240,7 @@ returnable_frag( fd_replay_tile_t * ctx,
22232240 maybe_verify_shred_version ( ctx );
22242241 break ;
22252242 case IN_KIND_EXEC : {
2226- process_exec_task_done ( ctx , fd_chunk_to_laddr ( ctx -> in [ in_idx ].mem , chunk ), sig );
2243+ process_exec_task_done ( ctx , stem , fd_chunk_to_laddr ( ctx -> in [ in_idx ].mem , chunk ), sig );
22272244 break ;
22282245 }
22292246 case IN_KIND_POH : {
0 commit comments