mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Wrap SharedLayoutContext::stylist in a wrapper to make it Sync.
This commit is contained in:
parent
e9b77628ce
commit
647232a495
3 changed files with 10 additions and 5 deletions
|
@ -74,6 +74,12 @@ fn create_or_get_local_context(shared_layout_context: &SharedLayoutContext)
|
|||
})
|
||||
}
|
||||
|
||||
pub struct StylistWrapper(pub *const Stylist);
|
||||
|
||||
// FIXME(#6569) This implementation is unsound.
|
||||
#[allow(unsafe_code)]
|
||||
unsafe impl Sync for StylistWrapper {}
|
||||
|
||||
/// Layout information shared among all workers. This must be thread-safe.
|
||||
pub struct SharedLayoutContext {
|
||||
/// The shared image cache task.
|
||||
|
@ -94,7 +100,7 @@ pub struct SharedLayoutContext {
|
|||
/// The CSS selector stylist.
|
||||
///
|
||||
/// FIXME(#2604): Make this no longer an unsafe pointer once we have fast `RWArc`s.
|
||||
pub stylist: *const Stylist,
|
||||
pub stylist: StylistWrapper,
|
||||
|
||||
/// The URL.
|
||||
pub url: Url,
|
||||
|
@ -122,7 +128,6 @@ pub struct SharedLayoutContext {
|
|||
|
||||
// FIXME(#6569) This implementations is unsound:
|
||||
// XXX UNSOUND!!! for image_cache_task
|
||||
// XXX UNSOUND!!! for stylist
|
||||
#[allow(unsafe_code)]
|
||||
unsafe impl Sync for SharedLayoutContext {}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ use app_units::Au;
|
|||
use azure::azure::AzColor;
|
||||
use canvas_traits::CanvasMsg;
|
||||
use construct::ConstructionResult;
|
||||
use context::{SharedLayoutContext, heap_size_of_local_context};
|
||||
use context::{SharedLayoutContext, StylistWrapper, heap_size_of_local_context};
|
||||
use cssparser::ToCss;
|
||||
use data::LayoutDataWrapper;
|
||||
use display_list_builder::ToGfxColor;
|
||||
|
@ -457,7 +457,7 @@ impl LayoutTask {
|
|||
screen_size_changed: screen_size_changed,
|
||||
font_cache_task: Mutex::new(self.font_cache_task.clone()),
|
||||
canvas_layers_sender: Mutex::new(self.canvas_layers_sender.clone()),
|
||||
stylist: &*rw_data.stylist,
|
||||
stylist: StylistWrapper(&*rw_data.stylist),
|
||||
url: (*url).clone(),
|
||||
visible_rects: rw_data.visible_rects.clone(),
|
||||
generation: rw_data.generation,
|
||||
|
|
|
@ -188,7 +188,7 @@ impl<'a> PreorderDomTraversal for RecalcStyleForNode<'a> {
|
|||
let shareable_element = match node.as_element() {
|
||||
Some(element) => {
|
||||
// Perform the CSS selector matching.
|
||||
let stylist = unsafe { &*self.layout_context.shared.stylist };
|
||||
let stylist = unsafe { &*self.layout_context.shared.stylist.0 };
|
||||
if element.match_element(stylist,
|
||||
Some(&*bf),
|
||||
&mut applicable_declarations) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue