about summary refs log tree commit diff
path: root/src/libcore/task/mod.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-05-02 20:51:56 -0700
committerBrian Anderson <banderson@mozilla.com>2013-05-02 20:51:56 -0700
commit6c478c7de889ec4943b9dcdcbfbb8a8244f479cc (patch)
tree7f9fd01150a7611007255cbb2e45cf41e0cd4989 /src/libcore/task/mod.rs
parentbaa1c1834f608c8c789db6d2495626ff9d28dd96 (diff)
parentf8dffc6789113a10c9dbf1d815c3569b19b53e96 (diff)
downloadrust-6c478c7de889ec4943b9dcdcbfbb8a8244f479cc.tar.gz
rust-6c478c7de889ec4943b9dcdcbfbb8a8244f479cc.zip
Merge remote-tracking branch 'brson/io' into incoming
Conflicts:
	mk/rt.mk
	src/libcore/run.rs
Diffstat (limited to 'src/libcore/task/mod.rs')
-rw-r--r--src/libcore/task/mod.rs29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs
index 0e97c101dc6..ebf2494c8ee 100644
--- a/src/libcore/task/mod.rs
+++ b/src/libcore/task/mod.rs
@@ -559,8 +559,31 @@ pub fn yield() {
 pub fn failing() -> bool {
     //! True if the running task has failed
 
-    unsafe {
-        rt::rust_task_is_unwinding(rt::rust_get_task())
+    use rt::{context, OldTaskContext};
+    use rt::local_services::borrow_local_services;
+
+    match context() {
+        OldTaskContext => {
+            unsafe {
+                rt::rust_task_is_unwinding(rt::rust_get_task())
+            }
+        }
+        _ => {
+            let mut unwinding = false;
+            do borrow_local_services |local| {
+                unwinding = match local.unwinder {
+                    Some(unwinder) => {
+                        unwinder.unwinding
+                    }
+                    None => {
+                        // Because there is no unwinder we can't be unwinding.
+                        // (The process will abort on failure)
+                        false
+                    }
+                }
+            }
+            return unwinding;
+        }
     }
 }
 
@@ -1194,7 +1217,7 @@ fn test_spawn_thread_on_demand() {
 
 #[test]
 fn test_simple_newsched_spawn() {
-    use rt::run_in_newsched_task;
+    use rt::test::run_in_newsched_task;
 
     do run_in_newsched_task {
         spawn(||())