fix leak of ArenaAllocated IndexPtr
This commit is contained in:
16
src/arena.rs
16
src/arena.rs
@@ -627,6 +627,12 @@ impl ArenaAllocated for IndexPtr {
|
|||||||
arena.base = Some(NonNull::new(raw_box).unwrap());
|
arena.base = Some(NonNull::new(raw_box).unwrap());
|
||||||
allocated_ptr
|
allocated_ptr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// - ptr points to an allocated slab of the correct kind
|
||||||
|
unsafe fn dealloc(ptr: NonNull<TypedAllocSlab<Self>>) {
|
||||||
|
drop(unsafe { Box::from_raw(ptr.as_ptr().cast::<AllocSlab>()) });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
@@ -768,11 +774,15 @@ unsafe fn drop_slab_in_place(value: NonNull<AllocSlab>) {
|
|||||||
ArenaHeaderTag::StandardErrorStream => {
|
ArenaHeaderTag::StandardErrorStream => {
|
||||||
drop_typed_slab_in_place!(StandardErrorStream, value);
|
drop_typed_slab_in_place!(StandardErrorStream, value);
|
||||||
}
|
}
|
||||||
ArenaHeaderTag::NullStream
|
ArenaHeaderTag::IndexPtrUndefined
|
||||||
| ArenaHeaderTag::IndexPtrUndefined
|
|
||||||
| ArenaHeaderTag::IndexPtrDynamicUndefined
|
| ArenaHeaderTag::IndexPtrDynamicUndefined
|
||||||
| ArenaHeaderTag::IndexPtrDynamicIndex
|
| ArenaHeaderTag::IndexPtrDynamicIndex
|
||||||
| ArenaHeaderTag::IndexPtrIndex => {}
|
| ArenaHeaderTag::IndexPtrIndex => {
|
||||||
|
drop_typed_slab_in_place!(IndexPtr, value);
|
||||||
|
}
|
||||||
|
ArenaHeaderTag::NullStream => {
|
||||||
|
unreachable!("NullStream is never arena allocated!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user