// Issue #763

extern mod std;
use comm::Chan;
use comm::send;
use comm::Port;
use comm::recv;

enum request { quit, close(Chan<bool>), }

type ctx = Chan<request>;

fn request_task(c: Chan<ctx>) {
    let p = Port();
    send(c, Chan(&p));
    let mut req: request;
    req = recv(p);
    // Need to drop req before receiving it again
    req = recv(p);
}

fn new_cx() -> ctx {
    let p = Port();
    let ch = Chan(&p);
    let t = task::spawn(|| request_task(ch) );
    let mut cx: ctx;
    cx = recv(p);
    return cx;
}

fn main() {
    let cx = new_cx();

    let p = Port::<bool>();
    send(cx, close(Chan(&p)));
    send(cx, quit);
}
