From 31797e35c453bc1c60beec24ccad9693e5e8482a Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 14 Jun 2022 21:11:46 -0400 Subject: [PATCH] fix(scenegraph): use OnceCell instead of RefCell --- src/core/client.rs | 2 +- src/core/scenegraph.rs | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/core/client.rs b/src/core/client.rs index 8e49a32..2932a21 100644 --- a/src/core/client.rs +++ b/src/core/client.rs @@ -16,7 +16,7 @@ impl Client { messenger: Messenger::new(connection), scenegraph: Default::default(), }); - client.scenegraph.set_client(&client); + let _ = client.scenegraph.client.set(Arc::downgrade(&client)); spatial::create_interface(&client); field::create_interface(&client); client diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index 45a022d..0b40434 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -3,7 +3,7 @@ use crate::nodes::core::Node; use anyhow::Result; use libstardustxr::scenegraph; use libstardustxr::scenegraph::ScenegraphError; -use std::cell::RefCell; +use once_cell::sync::OnceCell; use std::sync::{Arc, Weak}; use core::hash::BuildHasherDefault; @@ -12,17 +12,13 @@ use rustc_hash::FxHasher; #[derive(Default)] pub struct Scenegraph { - client: RefCell>, + pub(super) client: OnceCell>, nodes: DashMap, BuildHasherDefault>, } impl Scenegraph { pub fn get_client(&self) -> Arc { - self.client.borrow().upgrade().unwrap() - } - - pub fn set_client(&self, client: &Arc) { - *self.client.borrow_mut() = Arc::downgrade(client); + self.client.get().unwrap().upgrade().unwrap() } pub fn add_node(&self, node: Node) -> Arc {