diff --git a/src/components/layout/layout_task.rs b/src/components/layout/layout_task.rs index fd9013835e2..094b3e46177 100644 --- a/src/components/layout/layout_task.rs +++ b/src/components/layout/layout_task.rs @@ -303,7 +303,7 @@ impl LayoutTaskFactory for LayoutTask { layout.start(); } shutdown_chan.send(()); - }, FailureMsg(failure_msg), con_chan); + }, FailureMsg(failure_msg), con_chan, false); } } diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 9b31c8b0dfc..58ff29ddd10 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -302,7 +302,7 @@ impl ScriptTask { // This must always be the very last operation performed before the task completes failsafe.neuter(); - }, FailureMsg(failure_msg), const_chan); + }, FailureMsg(failure_msg), const_chan, false); } /// Handle incoming control messages. diff --git a/src/components/util/task.rs b/src/components/util/task.rs index 4a5addc59c0..b3e03771610 100644 --- a/src/components/util/task.rs +++ b/src/components/util/task.rs @@ -6,6 +6,7 @@ use std::str::IntoMaybeOwned; use std::task; use std::comm::Sender; use std::task::TaskBuilder; +use native::task::NativeTaskBuilder; pub fn spawn_named>(name: S, f: proc():Send) { let builder = task::TaskBuilder::new().named(name); @@ -14,15 +15,20 @@ pub fn spawn_named>(name: S, f: proc():Send) { /// Arrange to send a particular message to a channel if the task built by /// this `TaskBuilder` fails. -pub fn spawn_named_with_send_on_failure(name: &str, +pub fn spawn_named_with_send_on_failure(name: &'static str, f: proc(): Send, msg: T, - dest: Sender) { - let name = name.to_string(); - let future_result = TaskBuilder::new().named(name.clone()).try_future(f); + dest: Sender, + native: bool) { + let future_result = if native { + TaskBuilder::new().named(name).native().try_future(f) + } else { + TaskBuilder::new().named(name).try_future(f) + }; - let watch_name = format!("{:s}Watcher", name); - spawn_named(watch_name, proc() { + let watched_name = name.to_string(); + let watcher_name = format!("{:s}Watcher", watched_name); + TaskBuilder::new().named(watcher_name).spawn(proc() { match future_result.unwrap() { Ok(()) => (), Err(..) => {