From 2ee779c8393cf534414df6837333c188437fad0d Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Thu, 5 Jul 2012 21:01:18 -0400 Subject: [PATCH] Add test case in task.rs for #2782 --- src/libcore/task.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/libcore/task.rs b/src/libcore/task.rs index 7794798de11..fd69525d63e 100644 --- a/src/libcore/task.rs +++ b/src/libcore/task.rs @@ -1206,6 +1206,44 @@ fn test_unkillable() { po.recv(); } +#[test] +#[ignore(cfg(windows))] +#[should_fail] +fn test_unkillable_nested() { + import comm::methods; + let po = comm::port(); + let ch = po.chan(); + + // We want to do this after failing + do spawn { + for iter::repeat(10u) { yield() } + ch.send(()); + } + + do spawn { + yield(); + // We want to fail after the unkillable task + // blocks on recv + fail; + } + + unsafe { + do unkillable { + do unkillable {} // Here's the difference from the previous test. + let p = ~0; + let pp: *uint = unsafe::transmute(p); + + // If we are killed here then the box will leak + po.recv(); + + let _p: ~int = unsafe::transmute(pp); + } + } + + // Now we can be killed + po.recv(); +} + #[test] fn test_tls_multitask() unsafe { fn my_key(+_x: @str) { }