From 0c9dafe158eb763a59d888fbd660419a56aa7083 Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 20 Jun 2022 08:07:51 -0400 Subject: [PATCH] fix(registry): remove won't return result --- src/core/registry.rs | 13 ++++++------- src/nodes/data.rs | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/core/registry.rs b/src/core/registry.rs index 7b835fe..6c856d0 100644 --- a/src/core/registry.rs +++ b/src/core/registry.rs @@ -8,9 +8,12 @@ pub struct Registry(RwLock>>); impl Registry { pub fn add(&self, t: T) -> Arc { let t_arc = Arc::new(t); - self.0.write().insert(Arc::downgrade(&t_arc)); + self.add_raw(&t_arc); t_arc } + pub fn add_raw(&self, t: &Arc) { + self.0.write().insert(Arc::downgrade(t)); + } pub fn get_valid_contents(&self) -> Vec> { self.0 .read() @@ -18,21 +21,17 @@ impl Registry { .filter_map(|(_, item)| item.upgrade()) .collect() } - pub fn remove(&self, t: &T) -> Result<()> { + pub fn remove(&self, t: &T) { let mut del_idx: Option = None; for item in self.0.read().iter() { let (idx, item) = item; if let Some(item) = item.upgrade() { if std::ptr::eq(item.as_ref(), t) { - del_idx = Some(idx); + self.0.write().remove(idx); break; } } } - del_idx - .map(|idx| self.0.write().remove(idx)) - .ok_or_else(|| anyhow!("Node not found to remove"))?; - Ok(()) } } diff --git a/src/nodes/data.rs b/src/nodes/data.rs index 7bf8eed..48a036a 100644 --- a/src/nodes/data.rs +++ b/src/nodes/data.rs @@ -151,7 +151,7 @@ impl PulseSender { } impl Drop for PulseSender { fn drop(&mut self) { - let _ = PULSE_SENDER_REGISTRY.remove(self); + PULSE_SENDER_REGISTRY.remove(self); } } @@ -219,7 +219,7 @@ impl<'a> PulseReceiver { impl Drop for PulseReceiver { fn drop(&mut self) { - let _ = PULSE_RECEIVER_REGISTRY.remove(self); + PULSE_RECEIVER_REGISTRY.remove(self); } }