chiark / gitweb /
W
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 17 Aug 2023 15:27:57 +0000 (16:27 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 17 Aug 2023 15:27:57 +0000 (16:27 +0100)
Cargo.toml
src/main.rs

index 00c5180a4646848182050c3058a80bac1717390a..c68f178b087024fcf09f8e8329e1797c0ce02959 100644 (file)
@@ -9,6 +9,7 @@ edition = "2021"
 downcast-rs = "1"
 dumpster = "0.1.1"
 futures = "0.3.28"
+#parking_lot = "0.12.1"
 #tokio = { version = "1", features = ["full"] }
 #serde-value = "0.7"
 #serde = { version="1", features=["derive"] }
index 9ce70ab69b071f0fe884287da020cc5457da76ec..73a10244c1453eb2441ac32a7da57f5c67430dec 100644 (file)
@@ -1,8 +1,36 @@
-use futures::channel::oneshot;
 
-enum Void {}
+use std::cell::RefCell;
+
+use dumpster::{Collectable, unsync::Gc};
+
+#[derive(Collectable, Debug)]
+struct Loopy {
+    value: u32,
+    loopy: RefCell<Option<Gc<Loopy>>>,
+}
+
+impl Drop for Loopy {
+    fn drop(&mut self) {
+        eprintln!(
+            "drop {:?} {:?}",
+            self.value,
+            self.loopy.borrow().as_ref().map(|gcl| gcl.value),
+        );
+    }
+}
 
 fn main() {
-    type F = futures::future::Shared<oneshot::Receiver<Void>>;
-    println!("{:?}", std::alloc::Layout::new::<F>());
+    let a = Gc::new(Loopy {
+        value: 42,
+        loopy: None.into(),
+    });
+    let b = Gc::new(Loopy {
+        value: 66,
+        loopy: None.into(),
+    });
+    *a.loopy.borrow_mut() = Some(b.clone());
+    *b.loopy.borrow_mut() = Some(a.clone());
+    drop(a);
+    drop(b);
+    
 }