Skip to content

Commit 0acedbe

Browse files
committed
fix: use option
1 parent 770df33 commit 0acedbe

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/tasks/env.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)