Auto merge of #10070 - Ms2ger:unsafe-net, r=KiChjang

Disallow unsafe code in net and net_traits.

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10070)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-03-18 17:09:24 +05:30
commit e551ea7322
4 changed files with 40 additions and 14 deletions

View file

@ -18,7 +18,7 @@ use std::fs::File;
use std::io::Read; use std::io::Read;
use std::mem; use std::mem;
use std::sync::Arc; use std::sync::Arc;
use std::sync::mpsc::{Sender, channel}; use std::sync::mpsc::{Sender, Receiver, channel};
use url::Url; use url::Url;
use util::resource_files::resources_dir_path; use util::resource_files::resources_dir_path;
use util::thread::spawn_named; use util::thread::spawn_named;
@ -261,6 +261,32 @@ struct DecoderMsg {
image: Option<Image>, image: Option<Image>,
} }
struct Receivers {
cmd_receiver: Receiver<ImageCacheCommand>,
decoder_receiver: Receiver<DecoderMsg>,
progress_receiver: Receiver<ResourceLoadInfo>,
}
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. /// The types of messages that the main image cache thread receives.
enum SelectResult { enum SelectResult {
Command(ImageCacheCommand), Command(ImageCacheCommand),
@ -317,22 +343,16 @@ impl ImageCache {
webrender_api: webrender_api, webrender_api: webrender_api,
}; };
let receivers = Receivers {
cmd_receiver: cmd_receiver,
decoder_receiver: decoder_receiver,
progress_receiver: progress_receiver,
};
let mut exit_sender: Option<IpcSender<()>> = None; let mut exit_sender: Option<IpcSender<()>> = None;
loop { loop {
let result = select! { match receivers.recv() {
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 {
SelectResult::Command(cmd) => { SelectResult::Command(cmd) => {
exit_sender = cache.handle_cmd(cmd); exit_sender = cache.handle_cmd(cmd);
} }

View file

@ -9,6 +9,8 @@
#![feature(plugin)] #![feature(plugin)]
#![plugin(plugins)] #![plugin(plugins)]
#![deny(unsafe_code)]
extern crate brotli; extern crate brotli;
extern crate cookie as cookie_rs; extern crate cookie as cookie_rs;
extern crate devtools_traits; extern crate devtools_traits;

View file

@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * 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/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![allow(unsafe_code)]
use std::collections::HashMap; use std::collections::HashMap;
use std::env; use std::env;
use std::fs::File; use std::fs::File;

View file

@ -11,6 +11,8 @@
#![feature(custom_attribute)] #![feature(custom_attribute)]
#![plugin(heapsize_plugin, serde_macros)] #![plugin(heapsize_plugin, serde_macros)]
#![deny(unsafe_code)]
extern crate heapsize; extern crate heapsize;
extern crate hyper; extern crate hyper;
extern crate image as piston_image; extern crate image as piston_image;