aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/util/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/util/task.rs')
-rw-r--r--src/components/util/task.rs14
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),
+ }
+ }
+}