1
Fork 0

Add SAFETY comments to the thread local implementation

Reduce `unsafe` block scope and add `SAFETY` comments.
This commit is contained in:
Trevor Gross 2024-04-08 17:47:09 -04:00
parent 2aec2fe3b8
commit 6e68a2f475

View file

@ -281,10 +281,9 @@ impl<T: 'static> LocalKey<T> {
where where
F: FnOnce(&T) -> R, F: FnOnce(&T) -> R,
{ {
unsafe { // SAFETY: `inner` is safe to call within the lifetime of the thread
let thread_local = (self.inner)(None).ok_or(AccessError)?; let thread_local = unsafe { (self.inner)(None).ok_or(AccessError)? };
Ok(f(thread_local)) Ok(f(thread_local))
}
} }
/// Acquires a reference to the value in this TLS key, initializing it with /// Acquires a reference to the value in this TLS key, initializing it with
@ -303,14 +302,17 @@ impl<T: 'static> LocalKey<T> {
where where
F: FnOnce(Option<T>, &T) -> R, F: FnOnce(Option<T>, &T) -> R,
{ {
unsafe { let mut init = Some(init);
let mut init = Some(init);
let reference = (self.inner)(Some(&mut init)).expect( // SAFETY: `inner` is safe to call within the lifetime of the thread
let reference = unsafe {
(self.inner)(Some(&mut init)).expect(
"cannot access a Thread Local Storage value \ "cannot access a Thread Local Storage value \
during or after destruction", during or after destruction",
); )
f(init, reference) };
}
f(init, reference)
} }
} }