fix(registry): remove won't return result
This commit is contained in:
@@ -8,9 +8,12 @@ pub struct Registry<T>(RwLock<Slab<Weak<T>>>);
|
|||||||
impl<T> Registry<T> {
|
impl<T> Registry<T> {
|
||||||
pub fn add(&self, t: T) -> Arc<T> {
|
pub fn add(&self, t: T) -> Arc<T> {
|
||||||
let t_arc = Arc::new(t);
|
let t_arc = Arc::new(t);
|
||||||
self.0.write().insert(Arc::downgrade(&t_arc));
|
self.add_raw(&t_arc);
|
||||||
t_arc
|
t_arc
|
||||||
}
|
}
|
||||||
|
pub fn add_raw(&self, t: &Arc<T>) {
|
||||||
|
self.0.write().insert(Arc::downgrade(t));
|
||||||
|
}
|
||||||
pub fn get_valid_contents(&self) -> Vec<Arc<T>> {
|
pub fn get_valid_contents(&self) -> Vec<Arc<T>> {
|
||||||
self.0
|
self.0
|
||||||
.read()
|
.read()
|
||||||
@@ -18,21 +21,17 @@ impl<T> Registry<T> {
|
|||||||
.filter_map(|(_, item)| item.upgrade())
|
.filter_map(|(_, item)| item.upgrade())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
pub fn remove(&self, t: &T) -> Result<()> {
|
pub fn remove(&self, t: &T) {
|
||||||
let mut del_idx: Option<usize> = None;
|
let mut del_idx: Option<usize> = None;
|
||||||
for item in self.0.read().iter() {
|
for item in self.0.read().iter() {
|
||||||
let (idx, item) = item;
|
let (idx, item) = item;
|
||||||
if let Some(item) = item.upgrade() {
|
if let Some(item) = item.upgrade() {
|
||||||
if std::ptr::eq(item.as_ref(), t) {
|
if std::ptr::eq(item.as_ref(), t) {
|
||||||
del_idx = Some(idx);
|
self.0.write().remove(idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
del_idx
|
|
||||||
.map(|idx| self.0.write().remove(idx))
|
|
||||||
.ok_or_else(|| anyhow!("Node not found to remove"))?;
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ impl PulseSender {
|
|||||||
}
|
}
|
||||||
impl Drop for PulseSender {
|
impl Drop for PulseSender {
|
||||||
fn drop(&mut self) {
|
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 {
|
impl Drop for PulseReceiver {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
let _ = PULSE_RECEIVER_REGISTRY.remove(self);
|
PULSE_RECEIVER_REGISTRY.remove(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user