Sha256: 0ea04ff17614e248e281e5e730ecc615f1e310aefac42a7f95da2dcfb42c1c5e

Contents?: true

Size: 1.37 KB

Versions: 15

Compression:

Stored size: 1.37 KB

Contents

use std::env;
use std::io::prelude::*;
use std::io::BufReader;
use std::process::{Command, Stdio};
use std::sync::mpsc;
use std::thread;

use jobserver::Client;

macro_rules! t {
    ($e:expr) => {
        match $e {
            Ok(e) => e,
            Err(e) => panic!("{} failed with {}", stringify!($e), e),
        }
    };
}

fn main() {
    if env::var("I_AM_THE_CLIENT").is_ok() {
        client();
    } else {
        server();
    }
}

fn server() {
    let me = t!(env::current_exe());
    let client = t!(Client::new(1));
    let mut cmd = Command::new(me);
    cmd.env("I_AM_THE_CLIENT", "1").stdout(Stdio::piped());
    client.configure(&mut cmd);
    let acq = client.acquire().unwrap();
    let mut child = t!(cmd.spawn());
    let stdout = child.stdout.take().unwrap();
    let (tx, rx) = mpsc::channel();
    let t = thread::spawn(move || {
        for line in BufReader::new(stdout).lines() {
            tx.send(t!(line)).unwrap();
        }
    });

    for _ in 0..100 {
        assert!(rx.try_recv().is_err());
    }

    drop(acq);
    assert_eq!(rx.recv().unwrap(), "hello!");
    t.join().unwrap();
    assert!(rx.recv().is_err());
    client.acquire().unwrap();
}

fn client() {
    let client = unsafe { Client::from_env().unwrap() };
    let acq = client.acquire().unwrap();
    println!("hello!");
    drop(acq);
}

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
wasmtime-23.0.2 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-22.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-21.0.1 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-20.0.2 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-20.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-18.0.3 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-17.0.1 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-17.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-16.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-15.0.1 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-15.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-14.0.4 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-14.0.3 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-14.0.1 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs
wasmtime-14.0.0 ./ext/cargo-vendor/jobserver-0.1.27/tests/client-of-myself.rs