From a3dd67ae9165ee87c98ba7e5585ce859fd3fbe68 Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Mon, 6 Aug 2012 17:15:44 -0400 Subject: Make 100 generations perf test sensitive to spawn failures --- src/test/bench/task-perf-jargon-metal-smoke.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src') 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"; + } } -- cgit 1.4.1-3-g733a5