diff options
author | bors-servo <metajack+bors@gmail.com> | 2014-10-24 18:09:27 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2014-10-24 18:09:27 -0600 |
commit | 0c12f630e6352fc2aa00b638d014b2505f68af1f (patch) | |
tree | 763a529029964b132f4f70e7d3b60838ec257fc3 /components/util/task.rs | |
parent | 06f322a7dba52ab73a91dd5e9030723055d2ca63 (diff) | |
parent | f508a82582843cb0fdacdcd88be2f73d59529203 (diff) | |
download | servo-0c12f630e6352fc2aa00b638d014b2505f68af1f.tar.gz servo-0c12f630e6352fc2aa00b638d014b2505f68af1f.zip |
auto merge of #3797 : kmcallister/servo/domrefcell, r=jdm
r? @mbrubeck, @jdm
Alternative to #3770 and #3716.
Diffstat (limited to 'components/util/task.rs')
-rw-r--r-- | components/util/task.rs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/components/util/task.rs b/components/util/task.rs index b3e03771610..f286efe5bc3 100644 --- a/components/util/task.rs +++ b/components/util/task.rs @@ -8,22 +8,29 @@ use std::comm::Sender; use std::task::TaskBuilder; use native::task::NativeTaskBuilder; +use task_state; + pub fn spawn_named<S: IntoMaybeOwned<'static>>(name: S, f: proc():Send) { let builder = task::TaskBuilder::new().named(name); builder.spawn(f); } -/// Arrange to send a particular message to a channel if the task built by -/// this `TaskBuilder` fails. +/// Arrange to send a particular message to a channel if the task fails. pub fn spawn_named_with_send_on_failure<T: Send>(name: &'static str, + state: task_state::TaskState, f: proc(): Send, msg: T, dest: Sender<T>, native: bool) { + let with_state = proc() { + task_state::initialize(state); + f() + }; + let future_result = if native { - TaskBuilder::new().named(name).native().try_future(f) + TaskBuilder::new().named(name).native().try_future(with_state) } else { - TaskBuilder::new().named(name).try_future(f) + TaskBuilder::new().named(name).try_future(with_state) }; let watched_name = name.to_string(); |