diff --git a/components/net/image_cache_thread.rs b/components/net/image_cache_thread.rs index 07868c4a4b3..46c0037d126 100644 --- a/components/net/image_cache_thread.rs +++ b/components/net/image_cache_thread.rs @@ -18,7 +18,7 @@ use std::fs::File; use std::io::Read; use std::mem; use std::sync::Arc; -use std::sync::mpsc::{Sender, channel}; +use std::sync::mpsc::{Sender, Receiver, channel}; use url::Url; use util::resource_files::resources_dir_path; use util::thread::spawn_named; @@ -261,6 +261,32 @@ struct DecoderMsg { image: Option, } +struct Receivers { + cmd_receiver: Receiver, + decoder_receiver: Receiver, + progress_receiver: Receiver, +} + +impl Receivers { + #[allow(unsafe_code)] + fn recv(&self) -> SelectResult { + let cmd_receiver = &self.cmd_receiver; + let decoder_receiver = &self.decoder_receiver; + let progress_receiver = &self.progress_receiver; + select! { + msg = cmd_receiver.recv() => { + SelectResult::Command(msg.unwrap()) + }, + msg = decoder_receiver.recv() => { + SelectResult::Decoder(msg.unwrap()) + }, + msg = progress_receiver.recv() => { + SelectResult::Progress(msg.unwrap()) + } + } + } +} + /// The types of messages that the main image cache thread receives. enum SelectResult { Command(ImageCacheCommand), @@ -317,22 +343,16 @@ impl ImageCache { webrender_api: webrender_api, }; + let receivers = Receivers { + cmd_receiver: cmd_receiver, + decoder_receiver: decoder_receiver, + progress_receiver: progress_receiver, + }; + let mut exit_sender: Option> = None; loop { - let result = select! { - msg = cmd_receiver.recv() => { - SelectResult::Command(msg.unwrap()) - }, - msg = decoder_receiver.recv() => { - SelectResult::Decoder(msg.unwrap()) - }, - msg = progress_receiver.recv() => { - SelectResult::Progress(msg.unwrap()) - } - }; - - match result { + match receivers.recv() { SelectResult::Command(cmd) => { exit_sender = cache.handle_cmd(cmd); } diff --git a/components/net/lib.rs b/components/net/lib.rs index 23ac7f832b8..ac740a5b9aa 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -9,6 +9,8 @@ #![feature(plugin)] #![plugin(plugins)] +#![deny(unsafe_code)] + extern crate brotli; extern crate cookie as cookie_rs; extern crate devtools_traits; diff --git a/components/net_traits/hosts.rs b/components/net_traits/hosts.rs index 4d6824ae033..25e4ba32091 100644 --- a/components/net_traits/hosts.rs +++ b/components/net_traits/hosts.rs @@ -2,6 +2,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#![allow(unsafe_code)] + use std::collections::HashMap; use std::env; use std::fs::File; diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 1bb6221ebd2..a741bec034c 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -11,6 +11,8 @@ #![feature(custom_attribute)] #![plugin(heapsize_plugin, serde_macros)] +#![deny(unsafe_code)] + extern crate heapsize; extern crate hyper; extern crate image as piston_image;