diff options
author | bors-servo <release+servo@mozilla.com> | 2014-05-26 03:07:23 -0400 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-05-26 03:07:23 -0400 |
commit | ea00ee8e509a46f6827254a5df35fe84c59f158b (patch) | |
tree | 8ee18c5a655e0e420d3cbef8cdbb5408bbd0b73f /src/components/net/image_cache_task.rs | |
parent | 3e4b2c1c7bda096115f1c90994ff9cc18826d51a (diff) | |
parent | 79ef14e84427ae2c871360da0666c20c8473ed3a (diff) | |
download | servo-ea00ee8e509a46f6827254a5df35fe84c59f158b.tar.gz servo-ea00ee8e509a46f6827254a5df35fe84c59f158b.zip |
auto merge of #2476 : glennw/servo/issue-2412, r=huonw
...on bug #2412.
Diffstat (limited to 'src/components/net/image_cache_task.rs')
-rw-r--r-- | src/components/net/image_cache_task.rs | 30 |
1 files changed, 5 insertions, 25 deletions
diff --git a/src/components/net/image_cache_task.rs b/src/components/net/image_cache_task.rs index 5ff85b771a2..60403e9da1e 100644 --- a/src/components/net/image_cache_task.rs +++ b/src/components/net/image_cache_task.rs @@ -7,7 +7,6 @@ use resource_task; use resource_task::ResourceTask; use servo_util::url::{UrlMap, url_map}; -use std::cast; use std::comm::{channel, Receiver, Sender}; use std::mem::replace; use std::task::spawn; @@ -144,8 +143,7 @@ struct ImageCache { /// The state of processsing an image for a URL state_map: UrlMap<ImageState>, /// List of clients waiting on a WaitForImage response - // FIXME(rust#13125): Remove the *() for the real type. - wait_map: UrlMap<Arc<Mutex<*()>>>, + wait_map: UrlMap<Arc<Mutex<Vec<Sender<ImageResponseMsg>>>>>, need_exit: Option<Sender<()>>, } @@ -373,17 +371,10 @@ impl ImageCache { fn purge_waiters(&mut self, url: Url, f: || -> ImageResponseMsg) { match self.wait_map.pop(&url) { Some(waiters) => { - let val = waiters.lock(); - let items = unsafe { - cast::transmute::<*(), Box<Vec<Sender<ImageResponseMsg>>>>(*val) - }; + let mut items = waiters.lock(); for response in items.iter() { response.send(f()); } - let _ = unsafe { - // Cast back to avoid the drop at the end. - cast::transmute::<Box<Vec<Sender<ImageResponseMsg>>>, *()>(items) - }; } None => () } @@ -411,22 +402,11 @@ impl ImageCache { if self.wait_map.contains_key(&url) { let waiters = self.wait_map.find_mut(&url).unwrap(); let mut response = Some(response); - let val = waiters.lock(); - let mut items = unsafe { - cast::transmute::<*(), Box<Vec<Sender<ImageResponseMsg>>>>(*val) - }; + let mut items = waiters.lock(); items.push(response.take().unwrap()); - let _ = unsafe { - // Cast back to avoid the drop at the end. - cast::transmute::<Box<Vec<Sender<ImageResponseMsg>>>, *()>(items) - }; } else { - let response = box vec!(response); - let wrapped = unsafe { - Arc::new(Mutex::new( - cast::transmute::<Box<Vec<Sender<ImageResponseMsg>>>, *()>(response))) - }; - + let response = vec!(response); + let wrapped = Arc::new(Mutex::new(response)); self.wait_map.insert(url, wrapped); } } |