37 lines
548 B
Rust
37 lines
548 B
Rust
|
// Issue #763
|
||
|
|
||
|
use std;
|
||
|
import std::task;
|
||
|
|
||
|
tag request {
|
||
|
quit;
|
||
|
close(chan[bool]);
|
||
|
}
|
||
|
|
||
|
type ctx = chan[request];
|
||
|
|
||
|
fn request_task(c: chan[ctx]) {
|
||
|
let p: port[request] = port();
|
||
|
c <| chan(p);
|
||
|
let req: request;
|
||
|
p |> req;
|
||
|
// Need to drop req before receiving it again
|
||
|
p |> req;
|
||
|
}
|
||
|
|
||
|
fn new() -> ctx {
|
||
|
let p: port[ctx] = port();
|
||
|
let t = spawn request_task(chan(p));
|
||
|
let cx: ctx;
|
||
|
p |> cx;
|
||
|
ret cx;
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let cx = new();
|
||
|
|
||
|
let p: port[bool] = port();
|
||
|
cx <| close(chan(p));
|
||
|
cx <| quit;
|
||
|
}
|