From 68cc30c1dfe8ae8ceb2dc9f3ea3e5836119acc4f Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Fri, 6 Dec 2013 16:39:59 -0800 Subject: [PATCH] Add a helper for sending a message on task failure --- src/components/util/task.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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(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(builder: &mut TaskBuilder, msg: T, dest: SharedChan) { + let port = builder.future_result(); + do spawn { + match port.recv() { + Ok(()) => (), + Err(..) => dest.send(msg), + } + } +}