diff --git a/components/layout/context.rs b/components/layout/context.rs index 66c919e7e44..283074ae3d9 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -25,8 +25,8 @@ use std::cell::{RefCell, RefMut}; use std::collections::HashMap; use std::collections::hash_state::DefaultState; use std::rc::Rc; -use std::sync::Arc; use std::sync::mpsc::{Sender, channel}; +use std::sync::{Arc, Mutex}; use style::selector_matching::Stylist; use url::Url; use util::mem::HeapSizeOf; @@ -80,7 +80,7 @@ pub struct SharedLayoutContext { pub image_cache_task: ImageCacheTask, /// A channel for the image cache to send responses to. - pub image_cache_sender: ImageCacheChan, + pub image_cache_sender: Mutex, /// The current viewport size. pub viewport_size: Size2D, @@ -125,7 +125,6 @@ pub struct SharedLayoutContext { // FIXME(#6569) This implementations is unsound: // XXX UNSOUND!!! for image_cache_task -// XXX UNSOUND!!! for image_cache_sender // XXX UNSOUND!!! for constellation_chan // XXX UNSOUND!!! for font_cache_task // XXX UNSOUND!!! for stylist @@ -196,8 +195,8 @@ impl<'a> LayoutContext<'a> { } // Not yet requested, async mode - request image from the cache (ImageState::NotRequested, false) => { - self.shared.image_cache_task - .request_image(url, self.shared.image_cache_sender.clone(), None); + let sender = self.shared.image_cache_sender.lock().unwrap().clone(); + self.shared.image_cache_task.request_image(url, sender, None); None } // Image has been requested, is still pending. Return no image diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 73393b2894f..71c6ac48d4d 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -452,7 +452,7 @@ impl LayoutTask { -> SharedLayoutContext { SharedLayoutContext { image_cache_task: rw_data.image_cache_task.clone(), - image_cache_sender: self.image_cache_sender.clone(), + image_cache_sender: Mutex::new(self.image_cache_sender.clone()), viewport_size: rw_data.viewport_size.clone(), screen_size_changed: screen_size_changed, constellation_chan: rw_data.constellation_chan.clone(),