From b5aa83f63314e3ff337c1888c818bf1b7c07a06e Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 6 Mar 2020 18:55:35 +0100 Subject: [PATCH] Don't compare the vtable pointers anymore when unrooting stuff --- components/script/dom/bindings/root.rs | 5 ++++- components/script/dom/bindings/trace.rs | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs index 3111182a638..0ba69687dba 100644 --- a/components/script/dom/bindings/root.rs +++ b/components/script/dom/bindings/root.rs @@ -262,7 +262,10 @@ impl RootCollection { unsafe fn unroot(&self, object: *const dyn JSTraceable) { debug_assert!(thread_state::get().is_script()); let roots = &mut *self.roots.get(); - match roots.iter().rposition(|r| *r == object) { + match roots + .iter() + .rposition(|r| *r as *const () == object as *const ()) + { Some(idx) => { roots.remove(idx); }, diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 631731e39a6..2d6b6c04379 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -891,7 +891,11 @@ impl RootedTraceableSet { unsafe fn remove(traceable: *const dyn JSTraceable) { ROOTED_TRACEABLES.with(|ref traceables| { let mut traceables = traceables.borrow_mut(); - let idx = match traceables.set.iter().rposition(|x| *x == traceable) { + let idx = match traceables + .set + .iter() + .rposition(|x| *x as *const () == traceable as *const ()) + { Some(idx) => idx, None => unreachable!(), };