Эх сурвалжийг харах

darkirc: forgotten detach() removed

aggstam 3 жил өмнө
parent
commit
88d3a808d3
1 өөрчлөгдсөн 19 нэмэгдсэн , 4 устгасан
  1. 19 4
      bin/darkirc/src/main.rs

+ 19 - 4
bin/darkirc/src/main.rs

@@ -210,19 +210,31 @@ async fn realmain(settings: Args, executor: Arc<smol::Executor<'_>>) -> Result<(
     // ==============
     // p2p dnet setup
     // ==============
+    info!(target: "darkirc", "Starting dnet subs task");
     let json_sub = JsonSubscriber::new("dnet.subscribe_events");
     let json_sub_ = json_sub.clone();
     let p2p_ = p2p.clone();
-    executor
-        .spawn(async move {
+    let dnet_task = StoppableTask::new();
+    dnet_task.clone().start(
+        async move {
             let dnet_sub = p2p_.dnet_sub().subscribe().await;
             loop {
                 let event = dnet_sub.receive().await;
                 debug!("Got dnet event: {:?}", event);
                 json_sub_.notify(vec![event.into()]).await;
             }
-        })
-        .detach();
+        },
+        |res| async {
+            match res {
+                Ok(()) | Err(Error::DetachedTaskStopped) => { /* Do nothing */ }
+                Err(e) => {
+                    error!(target: "darkirc", "Failed starting remove old events task: {}", e)
+                }
+            }
+        },
+        Error::DetachedTaskStopped,
+        executor.clone(),
+    );
 
     ////////////////////
     // RPC interface setup
@@ -314,6 +326,9 @@ async fn realmain(settings: Args, executor: Arc<smol::Executor<'_>>) -> Result<(
 
     model_clone.lock().await.save_tree(&datastore_path)?;
 
+    info!(target: "darkirc", "Stopping dnet subs task...");
+    dnet_task.stop().await;
+
     info!(target: "darkirc", "Stopping JSON-RPC server...");
     rpc_task.stop().await;