rust/src/test/run-pass/obj-dtor.rs

32 lines
687 B
Rust

// xfail-stage0
// xfail-stage1
// xfail-stage2
obj worker(chan[int] c) {drop { log "in dtor"; c <| 10; } }
fn do_work(chan[int] c) {
log "in child task";
{ let worker w = worker(c); log "constructed worker"; }
log "destructed worker";
while (true) {
// Deadlock-condition not handled properly yet, need to avoid
// exiting the child early.
c <| 11;
yield;
}
}
fn main() {
let port[int] p = port();
log "spawning worker";
auto w = spawn do_work(chan(p));
let int i;
log "parent waiting for shutdown";
p |> i;
log "received int";
assert (i == 10);
log "int is OK, child-dtor ran as expected";
}