diff options
author | Josh Matthews <josh@joshmatthews.net> | 2015-01-15 13:26:44 -0500 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2015-01-28 10:16:49 +1000 |
commit | 95fc29fa0db21959df99d81cdbb9561226321d2f (patch) | |
tree | a48e171165ec155062ef13c550b2c0f72d127425 /components/util/task.rs | |
parent | ff8cbff81016c157373c1675f3eee69dd70ae544 (diff) | |
download | servo-95fc29fa0db21959df99d81cdbb9561226321d2f.tar.gz servo-95fc29fa0db21959df99d81cdbb9561226321d2f.zip |
Update rustc to 00b112c45a604fa6f4b59af2a40c9deeadfdb7c6/rustc-1.0.0-dev.
Diffstat (limited to 'components/util/task.rs')
-rw-r--r-- | components/util/task.rs | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/components/util/task.rs b/components/util/task.rs index 44c2ff284dc..2045d0c3e83 100644 --- a/components/util/task.rs +++ b/components/util/task.rs @@ -3,33 +3,37 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::borrow::ToOwned; -use std::task; -use std::comm::Sender; -use std::task::TaskBuilder; use task_state; +use std::thread; +use std::sync::mpsc::Sender; +use std::thread::Builder; -pub fn spawn_named(name: String, f: proc():Send) { - let builder = task::TaskBuilder::new().named(name); - builder.spawn(proc() { - f(); +pub fn spawn_named<F>(name: String, f: F) + where F: FnOnce() + Send +{ + let builder = thread::Builder::new().name(name); + builder.spawn(move || { + f() }); } /// 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>) { - let future_result = TaskBuilder::new().named(name).try_future(proc() { +pub fn spawn_named_with_send_on_failure<F, T>(name: &'static str, + state: task_state::TaskState, + f: F, + msg: T, + dest: Sender<T>) + where F: FnOnce() + Send, + T: Send +{ + let future_handle = thread::Builder::new().name(name.to_owned()).scoped(move || { task_state::initialize(state); - f(); + f() }); - let watched_name = name.to_owned(); - let watcher_name = format!("{}Watcher", watched_name); - TaskBuilder::new().named(watcher_name).spawn(proc() { - match future_result.into_inner() { + let watcher_name = format!("{}Watcher", name); + Builder::new().name(watcher_name).spawn(move || { + match future_handle.join() { Ok(()) => (), Err(..) => { debug!("{} failed, notifying constellation", name); @@ -38,3 +42,10 @@ pub fn spawn_named_with_send_on_failure<T: Send>(name: &'static str, } }); } + +#[test] +fn spawn_named_test() { + spawn_named("Test".to_owned(), move || { + debug!("I can run!"); + }); +} |