Jelajahi Sumber

app: start changing Arcs to Weaks used inside tasks so Drop works correctly

darkfi 5 bulan lalu
induk
melakukan
336b123a36
2 mengubah file dengan 8 tambahan dan 6 penghapusan
  1. 7 5
      bin/app/src/app/schema/chat.rs
  2. 1 1
      bin/app/src/scene.rs

+ 7 - 5
bin/app/src/app/schema/chat.rs

@@ -18,7 +18,7 @@
 
 use darkfi_serial::Encodable;
 use sled_overlay::sled;
-use std::time::UNIX_EPOCH;
+use std::{sync::Arc, time::UNIX_EPOCH};
 
 use crate::{
     app::{
@@ -317,14 +317,15 @@ pub async fn make(
     // Menu doesn't exist yet ;)
     // So look it up in the callback.
     let sg_root = app.sg_root.clone();
-    let layer_node2 = layer_node.clone();
+    let layer_node_weak = Arc::downgrade(&layer_node);
     let chatview_is_visible = PropertyBool::wrap(&layer_node, Role::App, "is_visible", 0).unwrap();
     let renderer = app.renderer.clone();
     let goback = async move || {
         info!(target: "app::chat", "clicked back");
         let atom = &mut renderer.make_guard(gfxtag!("goback action"));
 
-        let editz_node = layer_node2.lookup_node("/content/editz").unwrap();
+        let layer_node = layer_node_weak.upgrade().unwrap();
+        let editz_node = layer_node.lookup_node("/content/editz").unwrap();
         editz_node.call_method("unfocus", vec![]).await.unwrap();
 
         let menu_node = sg_root.lookup_node("/window/content/menu_layer").unwrap();
@@ -846,11 +847,12 @@ pub async fn make(
 
     let (slot, recvr) = Slot::new("emoji_selected");
     emoji_picker_node.register("emoji_select", slot).unwrap();
-    let chatedit_node2 = chatedit_node.clone();
+    let chatedit_node_weak = Arc::downgrade(&chatedit_node);
     let listen_click = app.ex.spawn(async move {
         while let Ok(data) = recvr.recv().await {
             // No need to decode the data. Just pass it straight along
-            chatedit_node2.call_method("insert_text", data).await.unwrap();
+            let chatedit_node = chatedit_node_weak.upgrade().unwrap();
+            chatedit_node.call_method("insert_text", data).await.unwrap();
         }
     });
     app.tasks.lock().unwrap().push(listen_click);

+ 1 - 1
bin/app/src/scene.rs

@@ -463,7 +463,7 @@ impl std::fmt::Debug for SceneNode {
 
 impl Drop for SceneNode {
     fn drop(&mut self) {
-        t!("Drop {}:{}", self.name, self.id);
+        println!("Drop {}:{}", self.name, self.id);
     }
 }