diff --git a/src/iroh.rs b/src/iroh.rs index 1b2366b..0ce9c2d 100644 --- a/src/iroh.rs +++ b/src/iroh.rs @@ -90,6 +90,7 @@ pub struct NodeHost { announced_folders: Arc>>, lan_discovered_peers: Arc>>, lan_discovery_task: Option>, + blob_activity_task: tokio::task::JoinHandle<()>, } impl NodeHost { @@ -134,10 +135,11 @@ impl NodeHost { discovered_peers: Arc::clone(&discovered_peers), announced_folders: Arc::clone(&announced_folders), }; + let (blob_activity_events, blob_activity_task) = blob_activity_events(); let router = Router::builder(endpoint.clone()) .accept( iroh_blobs::ALPN, - BlobsProtocol::new(&store, Some(blob_activity_events())), + BlobsProtocol::new(&store, Some(blob_activity_events)), ) .accept(APPA_ALPN, protocol) .spawn(); @@ -150,6 +152,7 @@ impl NodeHost { announced_folders, lan_discovered_peers, lan_discovery_task, + blob_activity_task, }) } @@ -464,6 +467,7 @@ impl NodeHost { if let Some(task) = self.lan_discovery_task { task.abort(); } + self.blob_activity_task.abort(); self.router.shutdown().await?; self.endpoint.close().await; Ok(()) @@ -569,14 +573,14 @@ async fn request_control_message( .map_err(|_| anyhow::anyhow!("Appa control request timed out"))? } -fn blob_activity_events() -> EventSender { +fn blob_activity_events() -> (EventSender, tokio::task::JoinHandle<()>) { let event_mask = EventMask { get: RequestMode::Notify, get_many: RequestMode::Notify, ..EventMask::DEFAULT }; let (sender, mut receiver) = EventSender::channel(BLOB_ACTIVITY_EVENT_BUFFER, event_mask); - tokio::spawn(async move { + let task = tokio::spawn(async move { while let Some(message) = receiver.recv().await { if matches!( message, @@ -587,7 +591,7 @@ fn blob_activity_events() -> EventSender { } } }); - sender + (sender, task) } #[cfg(test)]