From 82c9d413306239a96b5f4ca8fc2612fd55cee501 Mon Sep 17 00:00:00 2001 From: chickenleaf Date: Sat, 26 Oct 2024 18:52:10 +0530 Subject: [PATCH] GC hazard fix in document.rs (#34020) Signed-off-by: L Ashwin B --- components/script/dom/document.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 578f18c9750..4c68ed3725f 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -4469,28 +4469,28 @@ impl DocumentMethods for Document { let ns = namespace_from_domstring(maybe_ns); let local = LocalName::from(tag_name); let qname = QualName::new(None, ns, local); - match self.tagns_map.borrow_mut().entry(qname.clone()) { - Occupied(entry) => DomRoot::from_ref(entry.get()), - Vacant(entry) => { - let result = HTMLCollection::by_qual_tag_name(&self.window, self.upcast(), qname); - entry.insert(Dom::from_ref(&*result)); - result - }, + if let Some(collection) = self.tagns_map.borrow().get(&qname) { + return DomRoot::from_ref(collection); } + let result = HTMLCollection::by_qual_tag_name(&self.window, self.upcast(), qname.clone()); + self.tagns_map + .borrow_mut() + .insert(qname, Dom::from_ref(&*result)); + result } // https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname fn GetElementsByClassName(&self, classes: DOMString) -> DomRoot { let class_atoms: Vec = split_html_space_chars(&classes).map(Atom::from).collect(); - match self.classes_map.borrow_mut().entry(class_atoms.clone()) { - Occupied(entry) => DomRoot::from_ref(entry.get()), - Vacant(entry) => { - let result = - HTMLCollection::by_atomic_class_name(&self.window, self.upcast(), class_atoms); - entry.insert(Dom::from_ref(&*result)); - result - }, + if let Some(collection) = self.classes_map.borrow().get(&class_atoms) { + return DomRoot::from_ref(collection); } + let result = + HTMLCollection::by_atomic_class_name(&self.window, self.upcast(), class_atoms.clone()); + self.classes_map + .borrow_mut() + .insert(class_atoms, Dom::from_ref(&*result)); + result } // https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid