diff --git a/components/script/dom/cssrulelist.rs b/components/script/dom/cssrulelist.rs index bc77361b5ae..1f1573a05d5 100644 --- a/components/script/dom/cssrulelist.rs +++ b/components/script/dom/cssrulelist.rs @@ -90,9 +90,12 @@ impl CSSRuleList { let index = idx as usize; let parent_stylesheet = self.parent_stylesheet.style_stylesheet(); - let mut guard = parent_stylesheet.shared_lock.write(); - let new_rule = css_rules.write_with(&mut guard) - .insert_rule(rule, parent_stylesheet, index, nested)?; + let new_rule = { + let mut guard = parent_stylesheet.shared_lock.write(); + css_rules.write_with(&mut guard).insert_rule(rule, parent_stylesheet, index, nested)? + // Drop `guard` here, + // CSSRule::new_specific re-acquires the lock for @support and @media. + }; let parent_stylesheet = &*self.parent_stylesheet; let dom_rule = CSSRule::new_specific(&window, parent_stylesheet, new_rule);