diff options
Diffstat (limited to 'src/components/util/task.rs')
-rw-r--r-- | src/components/util/task.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/components/util/task.rs b/src/components/util/task.rs index 20dc2b6ad6f..49b22348dfa 100644 --- a/src/components/util/task.rs +++ b/src/components/util/task.rs @@ -3,9 +3,23 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::task; +use std::comm::SharedChan; +use std::task::TaskBuilder; pub fn spawn_named<S: IntoSendStr>(name: S, f: proc()) { let mut builder = task::task(); builder.name(name); builder.spawn(f); } + +/// Arrange to send a particular message to a channel if the task built by +/// this `TaskBuilder` fails. +pub fn send_on_failure<T: Send>(builder: &mut TaskBuilder, msg: T, dest: SharedChan<T>) { + let port = builder.future_result(); + do spawn { + match port.recv() { + Ok(()) => (), + Err(..) => dest.send(msg), + } + } +} |