aboutsummaryrefslogtreecommitdiffstats
path: root/components/util/task.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2014-10-24 18:09:27 -0600
committerbors-servo <metajack+bors@gmail.com>2014-10-24 18:09:27 -0600
commit0c12f630e6352fc2aa00b638d014b2505f68af1f (patch)
tree763a529029964b132f4f70e7d3b60838ec257fc3 /components/util/task.rs
parent06f322a7dba52ab73a91dd5e9030723055d2ca63 (diff)
parentf508a82582843cb0fdacdcd88be2f73d59529203 (diff)
downloadservo-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.rs15
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();