From 82cafc42744f772f9bae35e7768e0425cd001a14 Mon Sep 17 00:00:00 2001 From: Sam Gibson Date: Sun, 19 Jul 2015 13:32:24 +1000 Subject: [PATCH] Passes an Arc> to threads instead of cloning --- components/net/http_loader.rs | 7 ++++--- components/net/resource_task.rs | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index cac53a0b608..4c417bcad3a 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -24,6 +24,7 @@ use std::error::Error; use openssl::ssl::{SslContext, SslMethod, SSL_VERIFY_PEER}; use std::io::{self, Read, Write}; use std::sync::Arc; +use std::sync::Mutex; use std::sync::mpsc::{Sender, channel}; use util::task::spawn_named; use util::resource_files::resources_dir_path; @@ -36,7 +37,7 @@ use std::boxed::FnBox; pub fn factory(cookies_chan: Sender, devtools_chan: Option>, - hsts_list: HSTSList) + hsts_list: Arc>) -> Box) + Send> { box move |load_data, senders, classifier| { spawn_named("http_loader".to_owned(), @@ -86,7 +87,7 @@ fn load(mut load_data: LoadData, classifier: Arc, cookies_chan: Sender, devtools_chan: Option>, - hsts_list: HSTSList) { + hsts_list: Arc>) { // FIXME: At the time of writing this FIXME, servo didn't have any central // location for configuration. If you're reading this and such a // repository DOES exist, please update this constant to use it. @@ -117,7 +118,7 @@ fn load(mut load_data: LoadData, loop { iters = iters + 1; - if request_must_be_secured(&hsts_list, &url) { + if request_must_be_secured(&hsts_list.lock().unwrap(), &url) { info!("{} is in the strict transport security list, requesting secure host", url); url = secure_url(&url); } diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 8d5f23343b7..f221b77e51d 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -33,6 +33,7 @@ use std::env; use std::fs::File; use std::io::{BufReader, Read}; use std::sync::Arc; +use std::sync::Mutex; use std::sync::mpsc::{channel, Receiver, Sender}; static mut HOST_TABLE: Option<*mut HashMap> = None; @@ -260,7 +261,7 @@ pub struct ResourceManager { resource_task: Sender, mime_classifier: Arc, devtools_chan: Option>, - hsts_list: HSTSList + hsts_list: Arc> } impl ResourceManager { @@ -274,7 +275,7 @@ impl ResourceManager { resource_task: resource_task, mime_classifier: Arc::new(MIMEClassifier::new()), devtools_chan: devtools_channel, - hsts_list: hsts_list + hsts_list: Arc::new(Mutex::new(hsts_list)) } } } @@ -293,11 +294,11 @@ impl ResourceManager { } pub fn add_hsts_entry(&mut self, entry: HSTSEntry) { - self.hsts_list.push(entry); + self.hsts_list.lock().unwrap().push(entry); } pub fn is_host_sts(&self, host: &str) -> bool { - self.hsts_list.is_host_secure(host) + self.hsts_list.lock().unwrap().is_host_secure(host) } fn load(&mut self, mut load_data: LoadData, consumer: LoadConsumer) {