()
| 1637 | |
| 1638 | #[test] |
| 1639 | fn owned_rooted() -> Result<()> { |
| 1640 | let _ = env_logger::try_init(); |
| 1641 | |
| 1642 | let mut config = Config::new(); |
| 1643 | config.wasm_function_references(true); |
| 1644 | config.wasm_gc(true); |
| 1645 | config.collector(Collector::DeferredReferenceCounting); |
| 1646 | |
| 1647 | let engine = Engine::new(&config)?; |
| 1648 | |
| 1649 | let mut store = Store::new(&engine, ()); |
| 1650 | let inner_dropped = Arc::new(AtomicBool::new(false)); |
| 1651 | let r = { |
| 1652 | let mut scope = RootScope::new(&mut store); |
| 1653 | let r = ExternRef::new(&mut scope, SetFlagOnDrop(inner_dropped.clone()))?; |
| 1654 | r.to_owned_rooted(&mut scope)? |
| 1655 | }; |
| 1656 | assert!(!inner_dropped.load(SeqCst)); |
| 1657 | store.gc(None)?; |
| 1658 | assert!(!inner_dropped.load(SeqCst)); |
| 1659 | let r2 = r.clone(); |
| 1660 | store.gc(None)?; |
| 1661 | assert!(!inner_dropped.load(SeqCst)); |
| 1662 | drop(r); |
| 1663 | store.gc(None)?; |
| 1664 | assert!(!inner_dropped.load(SeqCst)); |
| 1665 | drop(r2); |
| 1666 | store.gc(None)?; |
| 1667 | assert!(inner_dropped.load(SeqCst)); |
| 1668 | |
| 1669 | Ok(()) |
| 1670 | } |
| 1671 | |
| 1672 | #[test] |
| 1673 | #[cfg_attr(miri, ignore)] |
nothing calls this directly
no test coverage detected