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"] }
-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);
+
}