aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/net/image_cache_task.rs
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-05-23 21:10:21 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-05-24 05:54:46 +1000
commit79ef14e84427ae2c871360da0666c20c8473ed3a (patch)
treeefed7d5eb265fc4df539f396258d0784229b60ad /src/components/net/image_cache_task.rs
parentc753f3ee05a25b2bb756c3b0c3131eac7ad58f1a (diff)
downloadservo-79ef14e84427ae2c871360da0666c20c8473ed3a.tar.gz
servo-79ef14e84427ae2c871360da0666c20c8473ed3a.zip
Remove *() hack now that rust upgrade is complete. Fixes memory corruption bug #2412.
Diffstat (limited to 'src/components/net/image_cache_task.rs')
-rw-r--r--src/components/net/image_cache_task.rs30
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 2bb8b22323b..3801512a311 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;
@@ -145,8 +144,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<()>>,
}
@@ -374,17 +372,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 => ()
}
@@ -412,22 +403,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);
}
}