about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2012-08-06 17:15:44 -0400
committerBen Blum <bblum@andrew.cmu.edu>2012-08-06 19:46:20 -0400
commita3dd67ae9165ee87c98ba7e5585ce859fd3fbe68 (patch)
tree52c173d648797cc159061a13267cce5aec808e87 /src
parent6bd01d0ac804a5a839a4513907b5697e35c8ad2e (diff)
Make 100 generations perf test sensitive to spawn failures
Diffstat (limited to 'src')
-rw-r--r--src/test/bench/task-perf-jargon-metal-smoke.rs14
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";
+    }
 }