//! A lot of UNIX platforms don't have a specialized way to register TLS //! destructors for native TLS. Instead, we use one TLS key with a destructor //! that will run all native TLS destructors in the destructor list. use crate::ptr; use crate::sys::thread_local::destructors; use crate::sys::thread_local::key::{set, LazyKey}; pub fn enable() { static DTORS: LazyKey = LazyKey::new(Some(run)); // Setting the key value to something other than NULL will result in the // destructor being run at thread exit. unsafe { set(DTORS.force(), ptr::without_provenance_mut(1)); } unsafe extern "C" fn run(_: *mut u8) { unsafe { destructors::run(); } } }