about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2013-08-19 15:08:47 -0700
committerGraydon Hoare <graydon@mozilla.com>2013-08-19 15:09:20 -0700
commit610b2b58ecfcce10dd448c11941de956206d1bd1 (patch)
tree9b1a1d314396f799e510d6fe94cfde44d87612cf
parent19f4ae1415e2baa4b9d756b7af8a0d5779cfca9b (diff)
downloadrust-610b2b58ecfcce10dd448c11941de956206d1bd1.tar.gz
rust-610b2b58ecfcce10dd448c11941de956206d1bd1.zip
compiletest: do not run tests in sub-threads if on valgrind.
-rw-r--r--src/compiletest/runtest.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs
index 2346aba3bcb..a31efe26c1a 100644
--- a/src/compiletest/runtest.rs
+++ b/src/compiletest/runtest.rs
@@ -26,6 +26,7 @@ use std::os;
 use std::str;
 use std::task::{spawn_sched, SingleThreaded};
 use std::vec;
+use std::unstable::running_on_valgrind;
 
 use extra::test::MetricMap;
 
@@ -38,11 +39,21 @@ pub fn run(config: config, testfile: ~str) {
     // that destroys parallelism if we let normal schedulers block.
     // It should be possible to remove this spawn once std::run is
     // rewritten to be non-blocking.
-    do spawn_sched(SingleThreaded) {
+    //
+    // We do _not_ create another thread if we're running on V because
+    // it serializes all threads anyways.
+    if running_on_valgrind() {
         let config = config.take();
         let testfile = testfile.take();
         let mut _mm = MetricMap::new();
         run_metrics(config, testfile, &mut _mm);
+    } else {
+        do spawn_sched(SingleThreaded) {
+            let config = config.take();
+            let testfile = testfile.take();
+            let mut _mm = MetricMap::new();
+            run_metrics(config, testfile, &mut _mm);
+        }
     }
 }