servo: Merge #10070 - Disallow unsafe code in net and net_traits (from Ms2ger:unsafe-net); r=KiChjang

Source-Repo: https://github.com/servo/servo
Source-Revision: e551ea73226404152e02c3445f4f91e639bf66ce
This commit is contained in:
Ms2ger 2016-03-18 16:40:24 +05:01
Родитель 7322ebf28d
Коммит 156edc0b82
4 изменённых файлов: 40 добавлений и 14 удалений

Просмотреть файл

@ -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<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.
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<IpcSender<()>> = 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);
}

Просмотреть файл

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

Просмотреть файл

@ -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;

Просмотреть файл

@ -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;