From e9b77628ce1caf4c9bb77d98c95fe7ff71dddb32 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 6 Nov 2015 23:08:05 +0100 Subject: [PATCH] Wrap SharedLayoutContext::canvas_layers_sender in a Mutex. --- components/layout/context.rs | 3 +-- components/layout/display_list_builder.rs | 2 +- components/layout/layout_task.rs | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/components/layout/context.rs b/components/layout/context.rs index eb5c19cc596..86d98e8a4fa 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -108,7 +108,7 @@ pub struct SharedLayoutContext { pub new_animations_sender: Mutex>, /// A channel to send canvas renderers to paint task, in order to correctly paint the layers - pub canvas_layers_sender: Sender<(LayerId, IpcSender)>, + pub canvas_layers_sender: Mutex)>>, /// The visible rects for each layer, as reported to us by the compositor. pub visible_rects: Arc, DefaultState>>, @@ -123,7 +123,6 @@ pub struct SharedLayoutContext { // FIXME(#6569) This implementations is unsound: // XXX UNSOUND!!! for image_cache_task // XXX UNSOUND!!! for stylist -// XXX UNSOUND!!! for canvas_layers_sender #[allow(unsafe_code)] unsafe impl Sync for SharedLayoutContext {} diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index 907bb5b129d..52c481f504e 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -1150,7 +1150,7 @@ impl FragmentDisplayListBuilding for Fragment { let data = receiver.recv().unwrap(); // Propagate the layer and the renderer to the paint task. - layout_context.shared.canvas_layers_sender.send( + layout_context.shared.canvas_layers_sender.lock().unwrap().send( (layer_id, (*ipc_renderer).clone())).unwrap(); data diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 604a0743d34..d39f6c06a7a 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -456,7 +456,7 @@ impl LayoutTask { viewport_size: rw_data.viewport_size.clone(), screen_size_changed: screen_size_changed, font_cache_task: Mutex::new(self.font_cache_task.clone()), - canvas_layers_sender: self.canvas_layers_sender.clone(), + canvas_layers_sender: Mutex::new(self.canvas_layers_sender.clone()), stylist: &*rw_data.stylist, url: (*url).clone(), visible_rects: rw_data.visible_rects.clone(),