Replace ScopedTLS::unsafe_get by ScopedTLS::into_slots

We only ever look at the slots after we are done with the thread pool,
so we don't need to expose any unsafety to inspect the slots.
This commit is contained in:
Anthony Ramine 2020-04-04 22:26:58 +02:00
parent 5d6c5132c1
commit e7cb736796
2 changed files with 6 additions and 8 deletions

View file

@ -165,10 +165,9 @@ pub fn traverse_dom<E, D>(
if dump_stats || report_stats { if dump_stats || report_stats {
let mut aggregate = mem::replace(&mut context.thread_local.statistics, Default::default()); let mut aggregate = mem::replace(&mut context.thread_local.statistics, Default::default());
let parallel = maybe_tls.is_some(); let parallel = maybe_tls.is_some();
if let Some(ref mut tls) = maybe_tls { if let Some(tls) = maybe_tls {
let slots = unsafe { tls.unsafe_get() }; for mut slot in tls.into_slots().into_vec() {
for slot in slots { if let Some(cx) = slot.get_mut() {
if let Some(ref cx) = *slot.borrow() {
aggregate += cx.statistics.clone(); aggregate += cx.statistics.clone();
} }
} }

View file

@ -71,9 +71,8 @@ impl<'scope, T: Send> ScopedTLS<'scope, T> {
RefMut::map(opt, |x| x.as_mut().unwrap()) RefMut::map(opt, |x| x.as_mut().unwrap())
} }
/// Unsafe access to the slots. This can be used to access the TLS when /// Returns the slots, consuming the scope.
/// the caller knows that the pool does not have access to the TLS. pub fn into_slots(self) -> Box<[RefCell<Option<T>>]> {
pub unsafe fn unsafe_get(&self) -> &[RefCell<Option<T>>] { self.slots
&self.slots
} }
} }