diff --git a/src/arena.rs b/src/arena.rs index a3449d44..6acb279b 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -305,8 +305,10 @@ impl TypedArenaPtr { impl>> TypedArenaPtr { pub fn drop_payload(&mut self) { - self.set_tag(ArenaHeaderTag::Dropped); - unsafe { ManuallyDrop::drop(&mut *self.as_ptr()) } + if self.get_tag() != ArenaHeaderTag::Dropped { + self.set_tag(ArenaHeaderTag::Dropped); + unsafe { ManuallyDrop::drop(&mut *self.as_ptr()) } + } } } diff --git a/src/machine/loader.rs b/src/machine/loader.rs index 07efb58a..87483dce 100644 --- a/src/machine/loader.rs +++ b/src/machine/loader.rs @@ -323,8 +323,8 @@ impl<'a> LoadState<'a> for LiveLoadAndMachineState<'a> { #[inline(always)] fn reset_machine(loader: &mut Loader<'a, Self>) { if loader.payload.load_state.get_tag() != ArenaHeaderTag::Dropped { - loader.payload.load_state.drop_payload(); loader.reset_machine(); + loader.payload.load_state.drop_payload(); } }