about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-09-08 13:42:04 -0700
committerBrian Anderson <banderson@mozilla.com>2011-09-11 17:31:40 -0700
commit0ea55ffdc87cd65de707d2d947cb57084be950f7 (patch)
tree6a8b9c10df23f2cc0f75873640615bb60a37d6bf /src
parent6f6f36172b2e0cd86ffffd1d0ed2deb75972db72 (diff)
downloadrust-0ea55ffdc87cd65de707d2d947cb57084be950f7.tar.gz
rust-0ea55ffdc87cd65de707d2d947cb57084be950f7.zip
Use a unique exit status when the runtime fails normally
Check for it in run-fail tests
Diffstat (limited to 'src')
-rw-r--r--src/rt/rust_internal.h3
-rw-r--r--src/rt/rust_kernel.cpp2
-rw-r--r--src/rt/rust_scheduler.cpp2
-rw-r--r--src/test/compiletest/runtest.rs14
4 files changed, 15 insertions, 6 deletions
diff --git a/src/rt/rust_internal.h b/src/rt/rust_internal.h
index d2c8574280b..c01fc5f3127 100644
--- a/src/rt/rust_internal.h
+++ b/src/rt/rust_internal.h
@@ -99,6 +99,9 @@ static size_t const TIME_SLICE_IN_MS = 10;
 
 static size_t const BUF_BYTES = 2048;
 
+// The error status to use when the process fails
+#define PROC_FAIL_CODE 101;
+
 // Every reference counted object should use this macro and initialize
 // ref_count.
 
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp
index 54b1cc98d43..e5234b9d6f5 100644
--- a/src/rt/rust_kernel.cpp
+++ b/src/rt/rust_kernel.cpp
@@ -140,7 +140,7 @@ rust_kernel::fail() {
     // Runtime to terminate it in an unusual way" when trying to shutdown
     // cleanly.
 #if defined(__WIN32__)
-    exit(1);
+    exit(rval);
 #endif
     for(size_t i = 0; i < num_threads; ++i) {
         rust_scheduler *thread = threads[i];
diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp
index 3a69184d3fe..b127ec77efa 100644
--- a/src/rt/rust_scheduler.cpp
+++ b/src/rt/rust_scheduler.cpp
@@ -71,7 +71,7 @@ rust_scheduler::fail() {
     log(NULL, log_err, "domain %s @0x%" PRIxPTR " root task failed",
         name, this);
     I(this, kernel->rval == 0);
-    kernel->rval = 1;
+    kernel->rval = PROC_FAIL_CODE;
     kernel->fail();
 }
 
diff --git a/src/test/compiletest/runtest.rs b/src/test/compiletest/runtest.rs
index c98f1deba24..fdcd627811d 100644
--- a/src/test/compiletest/runtest.rs
+++ b/src/test/compiletest/runtest.rs
@@ -51,15 +51,21 @@ fn run_rfail_test(cx: &cx, props: &test_props, testfile: &str) {
 
     procres = exec_compiled_test(cx, props, testfile);
 
-    if procres.status == 0 {
-        fatal_procres("run-fail test didn't produce an error!", procres);
-    }
-
+    // The value our Makefile configures valgrind to return on failure
     const valgrind_err: int = 100;
     if procres.status == valgrind_err {
         fatal_procres("run-fail test isn't valgrind-clean!", procres);
     }
 
+    // The value the rust runtime returns on failure
+    const rust_err: int = 101;
+    if procres.status != rust_err {
+        fatal_procres(
+            #fmt("run-fail test produced the wrong error code: %d",
+                 procres.status),
+            procres);
+    }
+
     check_error_patterns(props, testfile, procres);
 }