fix: memory leak introduced by #4015

This commit is contained in:
Greg Johnston
2025-06-10 21:38:41 -04:00
parent f4e0be2d59
commit a9ab4ea372
2 changed files with 5 additions and 6 deletions

View File

@@ -458,7 +458,7 @@ pub(crate) struct OwnerInner {
#[cfg(feature = "sandboxed-arenas")]
arena: Arc<RwLock<ArenaMap>>,
paused: bool,
joined_owners: Vec<Owner>,
joined_owners: Vec<WeakOwner>,
}
impl Debug for OwnerInner {

View File

@@ -3,7 +3,6 @@ use or_poisoned::OrPoisoned;
use std::{
any::{Any, TypeId},
collections::VecDeque,
sync::Arc,
};
impl Owner {
@@ -13,7 +12,7 @@ impl Owner {
.write()
.or_poisoned()
.joined_owners
.push(other.clone());
.push(other.downgrade());
}
fn provide_context<T: Send + Sync + 'static>(&self, value: T) {
@@ -39,7 +38,7 @@ impl Owner {
let joined = inner
.joined_owners
.iter()
.map(|owner| Arc::clone(&owner.inner));
.flat_map(|owner| owner.upgrade().map(|owner| owner.inner));
for parent in parent.into_iter().chain(joined) {
let mut parent = Some(parent);
while let Some(ref this_parent) = parent.clone() {
@@ -76,7 +75,7 @@ impl Owner {
let joined = inner
.joined_owners
.iter()
.map(|owner| Arc::clone(&owner.inner));
.flat_map(|owner| owner.upgrade().map(|owner| owner.inner));
for parent in parent.into_iter().chain(joined) {
let mut parent = Some(parent);
while let Some(ref this_parent) = parent.clone() {
@@ -114,7 +113,7 @@ impl Owner {
let joined = inner
.joined_owners
.iter()
.map(|owner| Arc::clone(&owner.inner));
.flat_map(|owner| owner.upgrade().map(|owner| owner.inner));
for parent in parent.into_iter().chain(joined) {
let mut parent = Some(parent);
while let Some(ref this_parent) = parent.clone() {