From: Brian Anderson Date: Tue, 6 Aug 2013 21:32:30 +0000 (-0700) Subject: Disable linked failure tests X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=ce95b01014391f29a655d165d9e6d31449ceb835;p=rust.git Disable linked failure tests The implementation currently contains a race that leads to segfaults. --- diff --git a/doc/tutorial-tasks.md b/doc/tutorial-tasks.md index d9e4b9b399d..d190c332e66 100644 --- a/doc/tutorial-tasks.md +++ b/doc/tutorial-tasks.md @@ -424,7 +424,7 @@ there is no way to "catch" the exception. All tasks are, by default, _linked_ to each other. That means that the fates of all tasks are intertwined: if one fails, so do all the others. -~~~ +~~~{.xfail-test .linked-failure} # use std::task::spawn; # use std::task; # fn do_some_work() { loop { task::yield() } } @@ -447,7 +447,7 @@ pattern-match on a result to check whether it's an `Ok` result with an `int` field (representing a successful result) or an `Err` result (representing termination with an error). -~~~ +~~~{.xfail-test .linked-failure} # use std::task; # fn some_condition() -> bool { false } # fn calculate_result() -> int { 0 } @@ -490,7 +490,7 @@ proceed). Hence, you will need different _linked failure modes_. By default, task failure is _bidirectionally linked_, which means that if either task fails, it kills the other one. -~~~ +~~~{.xfail-test .linked-failure} # use std::task; # use std::comm::oneshot; # fn sleep_forever() { loop { let (p, c) = oneshot::<()>(); p.recv(); } } @@ -512,7 +512,7 @@ function `task::try`, which we saw previously, uses `spawn_supervised` internally, with additional logic to wait for the child task to finish before returning. Hence: -~~~ +~~~{.xfail-test .linked-failure} # use std::comm::{stream, Chan, Port}; # use std::comm::oneshot; # use std::task::{spawn, try}; @@ -543,7 +543,7 @@ also fail. Supervised task failure propagates across multiple generations even if an intermediate generation has already exited: -~~~ +~~~{.xfail-test .linked-failure} # use std::task; # use std::comm::oneshot; # fn sleep_forever() { loop { let (p, c) = oneshot::<()>(); p.recv(); } } @@ -563,7 +563,7 @@ fail!(); // Will kill grandchild even if child has already exited Finally, tasks can be configured to not propagate failure to each other at all, using `task::spawn_unlinked` for _isolated failure_. -~~~ +~~~{.xfail-test .linked-failure} # use std::task; # fn random() -> uint { 100 } # fn sleep_for(i: uint) { for _ in range(0, i) { task::yield() } } @@ -591,7 +591,7 @@ that repeatedly receives a `uint` message, converts it to a string, and sends the string in response. The child terminates when it receives `0`. Here is the function that implements the child task: -~~~~ +~~~{.xfail-test .linked-failure} # use extra::comm::DuplexStream; # use std::uint; fn stringifier(channel: &DuplexStream<~str, uint>) { @@ -614,7 +614,7 @@ response itself is simply the stringified version of the received value, Here is the code for the parent task: -~~~~ +~~~{.xfail-test .linked-failure} # use std::task::spawn; # use std::uint; # use extra::comm::DuplexStream; diff --git a/src/libextra/arc.rs b/src/libextra/arc.rs index cb4468f48ec..17f4cbbd152 100644 --- a/src/libextra/arc.rs +++ b/src/libextra/arc.rs @@ -611,6 +611,7 @@ fn test_mutex_arc_condvar() { } } } + #[test] #[should_fail] #[ignore(cfg(windows))] fn test_arc_condvar_poison() { unsafe { diff --git a/src/libextra/sync.rs b/src/libextra/sync.rs index 63e371899a9..4172c715adb 100644 --- a/src/libextra/sync.rs +++ b/src/libextra/sync.rs @@ -935,6 +935,7 @@ fn test_mutex_killed_simple() { // child task must have finished by the time try returns do m.lock { } } + #[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_mutex_killed_cond() { // Getting killed during cond wait must not corrupt the mutex while @@ -961,6 +962,7 @@ fn test_mutex_killed_cond() { assert!(!woken); } } + #[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_mutex_killed_broadcast() { use std::unstable::finally::Finally; diff --git a/src/libstd/rt/kill.rs b/src/libstd/rt/kill.rs index 789c7531eca..fbc9d1d2445 100644 --- a/src/libstd/rt/kill.rs +++ b/src/libstd/rt/kill.rs @@ -614,6 +614,7 @@ mod test { // Test cases don't care about the spare killed flag. fn make_kill_handle() -> KillHandle { let (h,_) = KillHandle::new(); h } + #[ignore(reason = "linked failure")] #[test] fn no_tombstone_success() { do run_in_newsched_task { @@ -819,6 +820,7 @@ fn block_and_wake() { } } + #[ignore(reason = "linked failure")] #[test] fn block_and_get_killed() { do with_test_task |mut task| { @@ -830,6 +832,7 @@ fn block_and_get_killed() { } } + #[ignore(reason = "linked failure")] #[test] fn block_already_killed() { do with_test_task |mut task| { @@ -839,6 +842,7 @@ fn block_already_killed() { } } + #[ignore(reason = "linked failure")] #[test] fn block_unkillably_and_get_killed() { do with_test_task |mut task| { @@ -856,6 +860,7 @@ fn block_unkillably_and_get_killed() { } } + #[ignore(reason = "linked failure")] #[test] fn block_on_pipe() { // Tests the "killable" path of casting to/from uint. @@ -869,6 +874,7 @@ fn block_on_pipe() { } } + #[ignore(reason = "linked failure")] #[test] fn block_unkillably_on_pipe() { // Tests the "indestructible" path of casting to/from uint. diff --git a/src/libstd/task/mod.rs b/src/libstd/task/mod.rs index 4b5543b8186..2e0c9c1d1ad 100644 --- a/src/libstd/task/mod.rs +++ b/src/libstd/task/mod.rs @@ -659,6 +659,7 @@ pub unsafe fn rekillable(f: &fn() -> U) -> U { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_kill_unkillable_task() { use rt::test::*; @@ -679,6 +680,7 @@ fn test_kill_unkillable_task() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_kill_rekillable_task() { use rt::test::*; @@ -720,6 +722,7 @@ fn test_cant_dup_task_builder() { #[cfg(test)] fn block_forever() { let (po, _ch) = stream::<()>(); po.recv(); } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port use rt::test::run_in_newsched_task; @@ -738,6 +741,7 @@ fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port po.recv(); } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_unlinked_unsup_no_fail_up() { // child unlinked fails use rt::test::run_in_newsched_task; @@ -745,6 +749,7 @@ fn test_spawn_unlinked_unsup_no_fail_up() { // child unlinked fails do spawn_unlinked { fail!(); } } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_unlinked_sup_no_fail_up() { // child unlinked fails use rt::test::run_in_newsched_task; @@ -754,6 +759,7 @@ fn test_spawn_unlinked_sup_no_fail_up() { // child unlinked fails do 16.times { task::yield(); } } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_unlinked_sup_fail_down() { use rt::test::run_in_newsched_task; @@ -766,6 +772,7 @@ fn test_spawn_unlinked_sup_fail_down() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_sup_fail_up() { // child fails; parent fails use rt::test::run_in_newsched_task; @@ -786,6 +793,7 @@ fn test_spawn_unlinked_sup_fail_down() { assert!(result.is_err()); } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_sup_fail_down() { // parent fails; child fails use rt::test::run_in_newsched_task; @@ -802,6 +810,7 @@ fn test_spawn_unlinked_sup_fail_down() { assert!(result.is_err()); } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_unsup_fail_up() { // child fails; parent fails use rt::test::run_in_newsched_task; @@ -814,6 +823,7 @@ fn test_spawn_unlinked_sup_fail_down() { assert!(result.is_err()); } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_unsup_fail_down() { // parent fails; child fails use rt::test::run_in_newsched_task; @@ -826,6 +836,7 @@ fn test_spawn_unlinked_sup_fail_down() { assert!(result.is_err()); } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_unsup_default_opts() { // parent fails; child fails use rt::test::run_in_newsched_task; @@ -844,6 +855,7 @@ fn test_spawn_unlinked_sup_fail_down() { // A couple bonus linked failure tests - testing for failure propagation even // when the middle task exits successfully early before kill signals are sent. +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_failure_propagate_grandchild() { use rt::test::run_in_newsched_task; @@ -860,6 +872,7 @@ fn test_spawn_failure_propagate_grandchild() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_failure_propagate_secondborn() { use rt::test::run_in_newsched_task; @@ -876,6 +889,7 @@ fn test_spawn_failure_propagate_secondborn() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_failure_propagate_nephew_or_niece() { use rt::test::run_in_newsched_task; @@ -892,6 +906,7 @@ fn test_spawn_failure_propagate_nephew_or_niece() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_linked_sup_propagate_sibling() { use rt::test::run_in_newsched_task; @@ -1195,6 +1210,7 @@ fn test_avoid_copying_the_body_unlinked() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] #[should_fail] @@ -1230,6 +1246,7 @@ fn test_unkillable() { po.recv(); } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] #[should_fail] @@ -1296,6 +1313,7 @@ fn test_simple_newsched_spawn() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_spawn_watched() { use rt::test::run_in_newsched_task; @@ -1318,6 +1336,7 @@ fn test_spawn_watched() { } } +#[ignore(reason = "linked failure")] #[test] #[ignore(cfg(windows))] fn test_indestructible() { use rt::test::run_in_newsched_task; diff --git a/src/test/run-fail/extern-fail.rs b/src/test/run-fail/extern-fail.rs index a281e986364..a65db3ee515 100644 --- a/src/test/run-fail/extern-fail.rs +++ b/src/test/run-fail/extern-fail.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // error-pattern:explicit failure // Testing that runtime failure doesn't cause callbacks to abort abnormally. // Instead the failure will be delivered after the callbacks return. diff --git a/src/test/run-fail/linked-failure.rs b/src/test/run-fail/linked-failure.rs index 41a9d7ddcea..52dfb8aef13 100644 --- a/src/test/run-fail/linked-failure.rs +++ b/src/test/run-fail/linked-failure.rs @@ -10,6 +10,7 @@ // except according to those terms. +// xfail-test linked failure // error-pattern:1 == 2 extern mod extra; diff --git a/src/test/run-fail/linked-failure2.rs b/src/test/run-fail/linked-failure2.rs index 0269e395986..d4049f6753e 100644 --- a/src/test/run-fail/linked-failure2.rs +++ b/src/test/run-fail/linked-failure2.rs @@ -10,6 +10,7 @@ // except according to those terms. +// xfail-test linked failure // error-pattern:fail use std::comm; diff --git a/src/test/run-fail/linked-failure3.rs b/src/test/run-fail/linked-failure3.rs index 1203f74322f..f40eae20bc0 100644 --- a/src/test/run-fail/linked-failure3.rs +++ b/src/test/run-fail/linked-failure3.rs @@ -10,6 +10,7 @@ // except according to those terms. +// xfail-test linked failure // error-pattern:fail use std::comm; diff --git a/src/test/run-fail/linked-failure4.rs b/src/test/run-fail/linked-failure4.rs index 766b43f211f..94e41f1ae68 100644 --- a/src/test/run-fail/linked-failure4.rs +++ b/src/test/run-fail/linked-failure4.rs @@ -9,6 +9,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // error-pattern:1 == 2 use std::comm; diff --git a/src/test/run-fail/spawnfail.rs b/src/test/run-fail/spawnfail.rs index de085a6f3ad..12dab8e25b7 100644 --- a/src/test/run-fail/spawnfail.rs +++ b/src/test/run-fail/spawnfail.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-win32 // error-pattern:explicit extern mod extra; diff --git a/src/test/run-fail/task-comm-recv-block.rs b/src/test/run-fail/task-comm-recv-block.rs index 8302b96ca3e..bd51ce38ec0 100644 --- a/src/test/run-fail/task-comm-recv-block.rs +++ b/src/test/run-fail/task-comm-recv-block.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // error-pattern:goodfail use std::comm; diff --git a/src/test/run-pass/issue-3168.rs b/src/test/run-pass/issue-3168.rs index 609849bffb4..f4e2a9f36a0 100644 --- a/src/test/run-pass/issue-3168.rs +++ b/src/test/run-pass/issue-3168.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-fast // xfail-win32 #7999 diff --git a/src/test/run-pass/lots-a-fail.rs b/src/test/run-pass/lots-a-fail.rs index cec0a7a756c..13296131236 100644 --- a/src/test/run-pass/lots-a-fail.rs +++ b/src/test/run-pass/lots-a-fail.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-win32 leaks extern mod extra; diff --git a/src/test/run-pass/send-iloop.rs b/src/test/run-pass/send-iloop.rs index e27f35d1851..a647e5849a8 100644 --- a/src/test/run-pass/send-iloop.rs +++ b/src/test/run-pass/send-iloop.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-win32 extern mod extra; diff --git a/src/test/run-pass/task-killjoin-rsrc.rs b/src/test/run-pass/task-killjoin-rsrc.rs index c811e548f3f..b8a1aa433a3 100644 --- a/src/test/run-pass/task-killjoin-rsrc.rs +++ b/src/test/run-pass/task-killjoin-rsrc.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-win32 // A port of task-killjoin to use a class with a dtor to manage diff --git a/src/test/run-pass/task-killjoin.rs b/src/test/run-pass/task-killjoin.rs index c94e00251d2..5382ac77671 100644 --- a/src/test/run-pass/task-killjoin.rs +++ b/src/test/run-pass/task-killjoin.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test linked failure // xfail-win32 // Create a task that is supervised by another task, join the supervised task