aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/util/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/servo/util/task.rs')
-rw-r--r--src/servo/util/task.rs32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/servo/util/task.rs b/src/servo/util/task.rs
index e92c56b1b7b..11fb6a2e38a 100644
--- a/src/servo/util/task.rs
+++ b/src/servo/util/task.rs
@@ -1,25 +1,23 @@
+use core::pipes::{Chan, Port};
+use core::pipes;
use core::task;
+use std::cell::Cell;
-pub fn spawn_listener<A: Owned>(
- f: fn~(oldcomm::Port<A>)) -> oldcomm::Chan<A> {
- let setup_po = oldcomm::Port();
- let setup_ch = oldcomm::Chan(&setup_po);
- do task::spawn |move f| {
- let po = oldcomm::Port();
- let ch = oldcomm::Chan(&po);
- oldcomm::send(setup_ch, ch);
- f(move po);
+pub fn spawn_listener<A: Owned>(f: fn~(Port<A>)) -> Chan<A> {
+ let (setup_po, setup_ch) = pipes::stream();
+ do task::spawn {
+ let (po, ch) = pipes::stream();
+ setup_ch.send(ch);
+ f(po);
}
- oldcomm::recv(setup_po)
+ setup_po.recv()
}
-pub fn spawn_conversation<A: Owned, B: Owned>
- (f: fn~(oldcomm::Port<A>, oldcomm::Chan<B>))
- -> (oldcomm::Port<B>, oldcomm::Chan<A>) {
- let from_child = oldcomm::Port();
- let to_parent = oldcomm::Chan(&from_child);
- let to_child = do spawn_listener |move f, from_parent| {
- f(from_parent, to_parent)
+pub fn spawn_conversation<A: Owned, B: Owned>(f: fn~(Port<A>, Chan<B>)) -> (Port<B>, Chan<A>) {
+ let (from_child, to_parent) = pipes::stream();
+ let to_parent = Cell(to_parent);
+ let to_child = do spawn_listener |from_parent| {
+ f(from_parent, to_parent.take())
};
(from_child, to_child)
}