Auto merge of #19872 - nox:domrefcell-tracing, r=jdm

Make JSTraceable for DomRefCell<T> panic if cell is mutably borrowed

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19872)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-01-26 08:26:49 -06:00 committed by GitHub
commit c0d9f28b04
2 changed files with 1 additions and 13 deletions

View file

@ -29,18 +29,6 @@ impl<T> DomRefCell<T> {
&*self.value.as_ptr() &*self.value.as_ptr()
} }
/// Borrow the contents for the purpose of GC tracing.
///
/// This succeeds even if the object is mutably borrowed,
/// so you have to be careful in trace code!
#[allow(unsafe_code)]
pub unsafe fn borrow_for_gc_trace(&self) -> &T {
// FIXME: IN_GC isn't reliable enough - doesn't catch minor GCs
// https://github.com/servo/servo/issues/6389
// debug_assert!(thread_state::get().contains(SCRIPT | IN_GC));
&*self.value.as_ptr()
}
/// Borrow the contents for the purpose of script deallocation. /// Borrow the contents for the purpose of script deallocation.
/// ///
#[allow(unsafe_code)] #[allow(unsafe_code)]

View file

@ -206,7 +206,7 @@ unsafe impl<T: JSTraceable> JSTraceable for UnsafeCell<T> {
unsafe impl<T: JSTraceable> JSTraceable for DomRefCell<T> { unsafe impl<T: JSTraceable> JSTraceable for DomRefCell<T> {
unsafe fn trace(&self, trc: *mut JSTracer) { unsafe fn trace(&self, trc: *mut JSTracer) {
(*self).borrow_for_gc_trace().trace(trc) (*self).borrow().trace(trc)
} }
} }