diff options
-rw-r--r-- | src/components/gfx/opts.rs | 3 | ||||
-rw-r--r-- | src/components/gfx/render_task.rs | 4 | ||||
-rw-r--r-- | src/components/main/pipeline.rs | 4 | ||||
-rw-r--r-- | src/test/harness/contenttest/contenttest.rs | 17 |
4 files changed, 21 insertions, 7 deletions
diff --git a/src/components/gfx/opts.rs b/src/components/gfx/opts.rs index 8ed3e9aa50e..ca9c9cc815b 100644 --- a/src/components/gfx/opts.rs +++ b/src/components/gfx/opts.rs @@ -39,6 +39,7 @@ pub struct Opts { output_file: Option<~str>, headless: bool, + hard_fail: bool, } fn print_usage(app: &str, opts: &[groups::OptGroup]) { @@ -59,6 +60,7 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { groups::optflagopt("p", "profile", "Profiler flag and output interval", "10"), groups::optflag("x", "exit", "Exit after load flag"), groups::optflag("z", "headless", "Headless mode"), + groups::optflag("f", "hard-fail", "Exit on task failure instead of displaying about:failure"), groups::optflag("h", "help", "Print this message") ]; @@ -127,5 +129,6 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { exit_after_load: opt_match.opt_present("x"), output_file: opt_match.opt_str("o"), headless: opt_match.opt_present("z"), + hard_fail: opt_match.opt_present("f"), } } diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs index e25c1354bba..00c30a51958 100644 --- a/src/components/gfx/render_task.rs +++ b/src/components/gfx/render_task.rs @@ -174,7 +174,9 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> { render_task.start(); // Destroy all the buffers. - render_task.buffer_map.clear(native_graphics_context!(render_task)); + render_task.native_graphics_context.as_ref().map(|ctx| + render_task.buffer_map.clear(ctx) + ); } } diff --git a/src/components/main/pipeline.rs b/src/components/main/pipeline.rs index 7b619de378a..77ac8741787 100644 --- a/src/components/main/pipeline.rs +++ b/src/components/main/pipeline.rs @@ -100,6 +100,7 @@ impl Pipeline { // Wrap task creation within a supervised task so that failure will // only tear down those tasks instead of ours. + let hard_fail = opts.hard_fail; let failure_chan = constellation_chan.clone(); let mut supervised_task = task::task(); let task_port = supervised_task.future_result(); @@ -139,6 +140,9 @@ impl Pipeline { match task_port.recv() { Ok(*) => (), Err(*) => { + if hard_fail { + fail!("Pipeline failed in hard-fail mode"); + } failure_chan.send(FailureMsg(id, subpage_id)); } } diff --git a/src/test/harness/contenttest/contenttest.rs b/src/test/harness/contenttest/contenttest.rs index 1b0defe8cc0..e7548b24610 100644 --- a/src/test/harness/contenttest/contenttest.rs +++ b/src/test/harness/contenttest/contenttest.rs @@ -16,7 +16,7 @@ use std::{os, str}; use std::cell::Cell; use std::os::list_dir_path; use std::rt::io::Reader; -use std::rt::io::process::{Process, ProcessConfig, Ignored, CreatePipe}; +use std::rt::io::process::{Process, ProcessConfig, Ignored, CreatePipe, InheritFd}; #[deriving(Clone)] struct Config { @@ -88,21 +88,21 @@ fn run_test(file: ~str) { let path = os::make_absolute(&Path::new(file)); // FIXME (#1094): not the right way to transform a path let infile = ~"file://" + path.display().to_str(); - let create_pipe = CreatePipe(true, false); // rustc #10228 + let stdout = CreatePipe(true, false); // rustc #10228 + let stderr = InheritFd(2); let config = ProcessConfig { program: "./servo", - args: [~"-z", infile.clone()], + args: [~"-z", ~"-f", infile.clone()], env: None, cwd: None, - io: [Ignored, create_pipe, Ignored] + io: [Ignored, stdout, stderr] }; let mut prc = Process::new(config).unwrap(); - let stdout = prc.io[1].get_mut_ref(); let mut output = ~[]; loop { - let byte = stdout.read_byte(); + let byte = prc.io[1].get_mut_ref().read_byte(); match byte { Some(byte) => { print!("{}", byte as char); @@ -119,4 +119,9 @@ fn run_test(file: ~str) { fail!(line); } } + + let retval = prc.wait(); + if retval != 0 { + fail!("Servo exited with non-zero status {}", retval); + } } |