@@ -45,7 +45,7 @@ impl EnvTask {
4545 }
4646
4747 /// Construct the BlockEnv and send it to the sender.
48- pub async fn task_fut ( self , sender : watch:: Sender < BlockEnv > ) {
48+ pub async fn task_fut ( self , sender : watch:: Sender < Option < BlockEnv > > ) {
4949 let span = info_span ! ( "EnvTask::task_fut::init" ) ;
5050 let mut poller = match self . provider . watch_blocks ( ) . instrument ( span. clone ( ) ) . await {
5151 Ok ( poller) => poller,
@@ -64,7 +64,10 @@ impl EnvTask {
6464 blocks. next ( ) . instrument ( info_span ! ( "EnvTask::task_fut::stream" ) ) . await
6565 {
6666 let Some ( block) = blocks. last ( ) else {
67+ // Clear the env, as the block has changed but we can't
68+ // get a new one
6769 debug ! ( "empty filter changes" ) ;
70+ let _ = sender. send ( None ) ;
6871 continue ;
6972 } ;
7073 let span = info_span ! ( "EnvTask::task_fut::loop" , hash = %block, number = tracing:: field:: Empty ) ;
@@ -79,11 +82,13 @@ impl EnvTask {
7982 Ok ( Some ( block) ) => block. header . inner ,
8083 Ok ( None ) => {
8184 let _span = span. enter ( ) ;
85+ let _ = sender. send ( None ) ;
8286 debug ! ( "block not found" ) ;
8387 continue ;
8488 }
8589 Err ( err) => {
8690 let _span = span. enter ( ) ;
91+ let _ = sender. send ( None ) ;
8792 error ! ( %err, "Failed to get latest block" ) ;
8893 break ;
8994 }
@@ -92,16 +97,16 @@ impl EnvTask {
9297
9398 let env = self . construct_block_env ( & previous) ;
9499 debug ! ( ?env, "constructed block env" ) ;
95- if let Err ( _) = sender. send ( env) {
100+ if let Err ( _) = sender. send ( Some ( env) ) {
96101 // The receiver has been dropped, so we can stop the task.
97102 break ;
98103 }
99104 }
100105 }
101106
102107 /// Spawn the task and return a watch::Receiver for the BlockEnv.
103- pub fn spawn ( self ) -> watch:: Receiver < BlockEnv > {
104- let ( sender, receiver) = watch:: channel ( BlockEnv :: default ( ) ) ;
108+ pub fn spawn ( self ) -> watch:: Receiver < Option < BlockEnv > > {
109+ let ( sender, receiver) = watch:: channel ( None ) ;
105110 let fut = self . task_fut ( sender) ;
106111 tokio:: spawn ( fut) ;
107112
0 commit comments