@@ -59,34 +59,45 @@ impl<N: NetworkSpec, C: Consensus<N::BlockResponse>, E: ExecutionProvider<N>> No
5959 loop {
6060 select ! {
6161 block = block_recv. recv( ) => {
62- if let Some ( block) = block {
63- let block_number = block. header( ) . number( ) ;
64- let timestamp = block. header( ) . timestamp( ) ;
62+ match block {
63+ Some ( block) => {
64+ let block_number = block. header( ) . number( ) ;
65+ let timestamp = block. header( ) . timestamp( ) ;
6566
66- // Calculate age of the block
67- let current_time = SystemTime :: now( )
68- . duration_since( UNIX_EPOCH )
69- . unwrap_or_default( )
70- . as_secs( ) ;
67+ // Calculate age of the block
68+ let current_time = SystemTime :: now( )
69+ . duration_since( UNIX_EPOCH )
70+ . unwrap_or_default( )
71+ . as_secs( ) ;
7172
72- let age = current_time. saturating_sub( timestamp) ;
73+ let age = current_time. saturating_sub( timestamp) ;
7374
74- info!(
75- target: "helios::client" ,
76- "latest block number={} age={}s" ,
77- block_number,
78- age
79- ) ;
75+ info!(
76+ target: "helios::client" ,
77+ "latest block number={} age={}s" ,
78+ block_number,
79+ age
80+ ) ;
8081
81- execution_ref. push_block(
82- block. clone( ) ,
83- BlockId :: Number ( BlockNumberOrTag :: Latest )
84- ) . await ;
82+ execution_ref. push_block(
83+ block. clone( ) ,
84+ BlockId :: Number ( BlockNumberOrTag :: Latest )
85+ ) . await ;
8586
86- _ = block_broadcast_ref. send( SubscriptionEvent :: NewHeads ( block) ) ;
87+ _ = block_broadcast_ref. send( SubscriptionEvent :: NewHeads ( block) ) ;
88+ }
89+ None => {
90+ // Sender dropped, consensus task has exited - client is no longer usable
91+ warn!( target: "helios::client" , "consensus client stopped, shut Helios down manually" ) ;
92+ break ;
93+ }
8794 }
8895 } ,
89- _ = finalized_block_recv. changed( ) => {
96+ finalized_changed = finalized_block_recv. changed( ) => {
97+ if finalized_changed. is_err( ) {
98+ warn!( target: "helios::client" , "consensus client stopped, shut Helios down manually" ) ;
99+ break ;
100+ }
90101 let block = finalized_block_recv. borrow_and_update( ) . clone( ) ;
91102 if let Some ( block) = block {
92103 let block_number = block. header( ) . number( ) ;
0 commit comments