diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2012-08-06 17:15:44 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2012-08-06 19:46:20 -0400 |
| commit | a3dd67ae9165ee87c98ba7e5585ce859fd3fbe68 (patch) | |
| tree | 52c173d648797cc159061a13267cce5aec808e87 | |
| parent | 6bd01d0ac804a5a839a4513907b5697e35c8ad2e (diff) | |
Make 100 generations perf test sensitive to spawn failures
| -rw-r--r-- | src/test/bench/task-perf-jargon-metal-smoke.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/test/bench/task-perf-jargon-metal-smoke.rs b/src/test/bench/task-perf-jargon-metal-smoke.rs index 0542204bf99..8f466eb55ff 100644 --- a/src/test/bench/task-perf-jargon-metal-smoke.rs +++ b/src/test/bench/task-perf-jargon-metal-smoke.rs @@ -5,16 +5,20 @@ // // The filename is a song reference; google it in quotes. -fn child_generation(gens_left: uint) { +fn child_generation(gens_left: uint, -c: pipes::chan<()>) { // This used to be O(n^2) in the number of generations that ever existed. // With this code, only as many generations are alive at a time as tasks // alive at a time, + let c = ~mut some(c); do task::spawn_supervised { + let c = option::swap_unwrap(c); if gens_left & 1 == 1 { task::yield(); // shake things up a bit } if gens_left > 0 { - child_generation(gens_left - 1); // recurse + child_generation(gens_left - 1, c); // recurse + } else { + c.send(()) } } } @@ -28,5 +32,9 @@ fn main(args: ~[~str]) { copy args }; - child_generation(uint::from_str(args[1]).get()); + let (c,p) = pipes::stream(); + child_generation(uint::from_str(args[1]).get(), c); + if p.try_recv().is_none() { + fail ~"it happened when we slumbered"; + } } |
