diff options
Diffstat (limited to 'src/servo/util/task.rs')
-rw-r--r-- | src/servo/util/task.rs | 32 |
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) } |