From: Ian Jackson Date: Tue, 22 Dec 2020 23:10:56 +0000 (+0000) Subject: phased startup X-Git-Tag: otter-0.2.0~165 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=e12ebbbda7ba14ef7e503597c51b7e3ea2100836;p=otter.git phased startup Signed-off-by: Ian Jackson --- diff --git a/wdriver.rs b/wdriver.rs index ceaf9d03..ce0aa696 100644 --- a/wdriver.rs +++ b/wdriver.rs @@ -104,7 +104,7 @@ fn prepare_tmpdir(opts: &Opts, current_exe: &str) -> String { } #[throws(AE)] -fn prepare_xserver1() -> impl FnOnce() -> Result<(), AE> { +fn prepare_xserver() { const DISPLAY : &str = "12"; let mut xcmd = Command::new("Xvfb"); @@ -120,28 +120,25 @@ fn prepare_xserver1() -> impl FnOnce() -> Result<(), AE> { .context("spawn Xvfb")?; let mut report = BufReader::new(child.stdout.take().unwrap()).lines(); - move ||{ - let l = report.next(); + let l = report.next(); - let s = child.try_wait().context("check on Xvfb")?; - if let Some(e) = s { - throw!(anyhow!("Xvfb failed to start: wait status = {}", &e)); - } - - match l { - Some(Ok(l)) if l == DISPLAY => { l }, - Some(Ok(l)) => throw!(anyhow!( - "Xfvb said {:?}, expected {:?}", - l, DISPLAY - )), - None => throw!(anyhow!("EOF from Xvfb (but it's still running?")), - Some(Err(e)) => throw!(AE::from(e).context("failed to read from Xfvb")), - }; - - env::set_var("DISPLAY", format!("[::1]:{}", DISPLAY)); - - Ok(()) + let s = child.try_wait().context("check on Xvfb")?; + if let Some(e) = s { + throw!(anyhow!("Xvfb failed to start: wait status = {}", &e)); } + + match l { + Some(Ok(l)) if l == DISPLAY => { l }, + Some(Ok(l)) => throw!(anyhow!( + "Xfvb said {:?}, expected {:?}", + l, DISPLAY + )), + None => throw!(anyhow!("EOF from Xvfb (but it's still running?")), + Some(Err(e)) => throw!(AE::from(e).context("failed to read from Xfvb")), + }; + + env::set_var("DISPLAY", format!("[::1]:{}", DISPLAY)); + } #[throws(AE)] @@ -160,9 +157,7 @@ pub fn setup() -> Setup { let tmp = prepare_tmpdir(&opts, ¤t_exe)?; - let xserver1 = prepare_xserver1().context("setup X server")?; - - xserver1().context("wait for X server")?; + prepare_xserver().context("setup X server")?; Setup { tmp,