core: Don't fail during port dtor
This commit is contained in:
parent
7277cd7198
commit
c424b7f847
1 changed files with 40 additions and 17 deletions
|
@ -93,7 +93,8 @@ fn listen<T: send, U>(f: fn(chan<T>) -> U) -> U {
|
|||
f(po.chan())
|
||||
}
|
||||
|
||||
resource port_ptr<T: send>(po: *rust_port) {
|
||||
resource port_ptr<T: send>(po: *rust_port) unsafe {
|
||||
task::unkillable {||
|
||||
// Once the port is detached it's guaranteed not to receive further
|
||||
// messages
|
||||
let yield = 0u;
|
||||
|
@ -112,6 +113,7 @@ resource port_ptr<T: send>(po: *rust_port) {
|
|||
recv_::<T>(po);
|
||||
}
|
||||
rustrt::del_port(po);
|
||||
}
|
||||
}
|
||||
|
||||
#[doc = "
|
||||
|
@ -459,3 +461,24 @@ fn test_listen() {
|
|||
assert parent.recv() == "oatmeal-salad";
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore(cfg(target_os="win32"))]
|
||||
fn test_port_detach_fail() {
|
||||
iter::repeat(100u) {||
|
||||
let builder = task::builder();
|
||||
task::unsupervise(builder);
|
||||
task::run(builder) {||
|
||||
let po = port();
|
||||
let ch = po.chan();
|
||||
|
||||
task::spawn {||
|
||||
fail;
|
||||
}
|
||||
|
||||
task::spawn {||
|
||||
ch.send(());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue