diff --git a/src/states.rs b/src/states.rs index 9ecbb1c..ff4e54b 100644 --- a/src/states.rs +++ b/src/states.rs @@ -5,7 +5,7 @@ use assetpath::AssetPath; use std::any::Any; use std::collections::HashMap; -use std::sync::{Arc, Mutex, RwLock}; +use std::sync::{Arc, Mutex, RwLock, Weak}; pub trait FutureStateChange: Fn() -> Result<()> + Send + Sync { fn clone_box<'a>(&self) -> Box @@ -45,74 +45,88 @@ struct State { /// only used for updating callbacks #[derive(Clone)] pub struct StateHandle { - state: Arc, + state: Weak, } impl StateHandle { pub fn update<'a>(&self, update_type: StateUpdateType<'a>) -> Result<()> { - self.state.update(update_type) + self.state.upgrade().unwrap().update(update_type) } } impl GetElement