diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2017-03-18 02:10:00 +0100 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2017-03-19 22:30:38 +0100 |
commit | 1bacd0eb1582f609ad9a9c9a8a33a737bf4bc6f3 (patch) | |
tree | a92f2a919f30d6db9f8542403dc1c04bee42c63a /components/script/dom/cssstyledeclaration.rs | |
parent | aeffca2a5900ebcf91063e9c7771b642817cb6bd (diff) | |
download | servo-1bacd0eb1582f609ad9a9c9a8a33a737bf4bc6f3.tar.gz servo-1bacd0eb1582f609ad9a9c9a8a33a737bf4bc6f3.zip |
Move all PropertyDeclarationBlock from RwLock<_> to Locked<_>
Diffstat (limited to 'components/script/dom/cssstyledeclaration.rs')
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index 8af3b3975d2..d5d248f7880 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -11,10 +11,9 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::cssrule::CSSRule; use dom::element::Element; -use dom::node::{Node, window_from_node}; +use dom::node::{Node, window_from_node, document_from_node}; use dom::window::Window; use dom_struct::dom_struct; -use parking_lot::RwLock; use servo_url::ServoUrl; use std::ascii::AsciiExt; use std::sync::Arc; @@ -23,6 +22,7 @@ use style::parser::ParserContextExtraData; use style::properties::{Importance, PropertyDeclarationBlock, PropertyId, LonghandId, ShorthandId}; use style::properties::{parse_one_declaration, parse_style_attribute}; use style::selector_parser::PseudoElement; +use style::shared_lock::Locked; use style_traits::ToCss; // http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface @@ -40,7 +40,7 @@ pub enum CSSStyleOwner { Element(JS<Element>), CSSRule(JS<CSSRule>, #[ignore_heap_size_of = "Arc"] - Arc<RwLock<PropertyDeclarationBlock>>), + Arc<Locked<PropertyDeclarationBlock>>), } impl CSSStyleOwner { @@ -55,10 +55,13 @@ impl CSSStyleOwner { let mut changed = true; match *self { CSSStyleOwner::Element(ref el) => { + let document = document_from_node(&**el); + let shared_lock = document.style_shared_lock(); let mut attr = el.style_attribute().borrow_mut().take(); let result = if attr.is_some() { let lock = attr.as_ref().unwrap(); - let mut pdb = lock.write(); + let mut guard = shared_lock.write(); + let mut pdb = lock.write_with(&mut guard); let result = f(&mut pdb, &mut changed); result } else { @@ -69,7 +72,7 @@ impl CSSStyleOwner { // exact conditions under it changes. changed = !pdb.declarations().is_empty(); if changed { - attr = Some(Arc::new(RwLock::new(pdb))); + attr = Some(Arc::new(shared_lock.wrap(pdb))); } result @@ -83,7 +86,8 @@ impl CSSStyleOwner { // // [1]: https://github.com/whatwg/html/issues/2306 if let Some(pdb) = attr { - let serialization = pdb.read().to_css_string(); + let guard = shared_lock.read(); + let serialization = pdb.read_with(&guard).to_css_string(); el.set_attribute(&local_name!("style"), AttrValue::Declaration(serialization, pdb)); @@ -96,7 +100,10 @@ impl CSSStyleOwner { result } CSSStyleOwner::CSSRule(ref rule, ref pdb) => { - let result = f(&mut *pdb.write(), &mut changed); + let result = { + let mut guard = rule.shared_lock().write(); + f(&mut *pdb.write_with(&mut guard), &mut changed) + }; if changed { rule.global().as_window().Document().invalidate_stylesheets(); } @@ -111,15 +118,20 @@ impl CSSStyleOwner { match *self { CSSStyleOwner::Element(ref el) => { match *el.style_attribute().borrow() { - Some(ref pdb) => f(&pdb.read()), + Some(ref pdb) => { + let document = document_from_node(&**el); + let guard = document.style_shared_lock().read(); + f(pdb.read_with(&guard)) + } None => { let pdb = PropertyDeclarationBlock::new(); f(&pdb) } } } - CSSStyleOwner::CSSRule(_, ref pdb) => { - f(&pdb.read()) + CSSStyleOwner::CSSRule(ref rule, ref pdb) => { + let guard = rule.shared_lock().read(); + f(pdb.read_with(&guard)) } } } |