From b374adc9dbeec2cc969723dbfcb5c8ee990953bd Mon Sep 17 00:00:00 2001 From: Orson Peters Date: Fri, 30 May 2025 12:13:55 +0200 Subject: Address review comments. --- library/std/src/sys/thread_local/native/lazy.rs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'library/std') diff --git a/library/std/src/sys/thread_local/native/lazy.rs b/library/std/src/sys/thread_local/native/lazy.rs index a2bf8d8b968..b556dd9aa25 100644 --- a/library/std/src/sys/thread_local/native/lazy.rs +++ b/library/std/src/sys/thread_local/native/lazy.rs @@ -84,8 +84,15 @@ where // access to self.value and may replace it. let mut old_value = unsafe { self.value.get().replace(MaybeUninit::new(v)) }; match self.state.replace(State::Alive) { + // If the variable is not being recursively initialized, register + // the destructor. This might be a noop if the value does not need + // destruction. State::Uninitialized => D::register_dtor(self), + + // Recursive initialization, we only need to drop the old value + // as we've already registered the destructor. State::Alive => unsafe { old_value.assume_init_drop() }, + State::Destroyed(_) => unreachable!(), } -- cgit 1.4.1-3-g733a5