aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/gfx/opts.rs3
-rw-r--r--src/components/gfx/render_task.rs4
-rw-r--r--src/components/main/pipeline.rs4
-rw-r--r--src/test/harness/contenttest/contenttest.rs17
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);
+ }
}