diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-04-01 18:17:16 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-04-18 14:07:35 -0700 |
| commit | ab08b4fbfde7e9cc9e0de07aed17b4d4e06ccc3e (patch) | |
| tree | 2e3a7fb6cf01cd07ff35f254d43ef00e8beed28c /src | |
| parent | b329f2fa82185c9e7c6bbbdf26270dd839618e9c (diff) | |
| download | rust-ab08b4fbfde7e9cc9e0de07aed17b4d4e06ccc3e.tar.gz rust-ab08b4fbfde7e9cc9e0de07aed17b4d4e06ccc3e.zip | |
core: Remove pipes::spawn_service, spawn_service_recv
These are only used in test cases; pipes isn't the right place for them; they are unnecessary. Conflicts: src/libcore/rt/uv/mod.rs
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/pipes.rs | 46 | ||||
| -rw-r--r-- | src/test/bench/pingpong.rs | 49 | ||||
| -rw-r--r-- | src/test/run-pass/pipe-detect-term.rs | 10 | ||||
| -rw-r--r-- | src/test/run-pass/pipe-select.rs | 22 | ||||
| -rw-r--r-- | src/test/run-pass/pipe-sleep.rs | 30 |
5 files changed, 102 insertions, 55 deletions
diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index fddb2af5587..fd50ecc5274 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -83,7 +83,6 @@ bounded and unbounded protocols allows for less code duplication. */ use cast::{forget, reinterpret_cast, transmute}; -use cell::Cell; use either::{Either, Left, Right}; use kinds::Owned; use libc; @@ -902,51 +901,6 @@ pub fn entangle<T>() -> (SendPacket<T>, RecvPacket<T>) { (SendPacket(p), RecvPacket(p)) } -/** Spawn a task to provide a service. - -It takes an initialization function that produces a send and receive -endpoint. The send endpoint is returned to the caller and the receive -endpoint is passed to the new task. - -*/ -pub fn spawn_service<T:Owned,Tb:Owned>( - init: extern fn() -> (SendPacketBuffered<T, Tb>, - RecvPacketBuffered<T, Tb>), - service: ~fn(v: RecvPacketBuffered<T, Tb>)) - -> SendPacketBuffered<T, Tb> { - let (client, server) = init(); - - // This is some nasty gymnastics required to safely move the pipe - // into a new task. - let server = Cell(server); - do task::spawn { - service(server.take()); - } - - client -} - -/** Like `spawn_service_recv`, but for protocols that start in the -receive state. - -*/ -pub fn spawn_service_recv<T:Owned,Tb:Owned>( - init: extern fn() -> (RecvPacketBuffered<T, Tb>, - SendPacketBuffered<T, Tb>), - service: ~fn(v: SendPacketBuffered<T, Tb>)) - -> RecvPacketBuffered<T, Tb> { - let (client, server) = init(); - - // This is some nasty gymnastics required to safely move the pipe - // into a new task. - let server = Cell(server); - do task::spawn { - service(server.take()) - } - - client -} - pub mod rt { use option::{None, Option, Some}; diff --git a/src/test/bench/pingpong.rs b/src/test/bench/pingpong.rs index 731605e82bd..64fb9652cea 100644 --- a/src/test/bench/pingpong.rs +++ b/src/test/bench/pingpong.rs @@ -14,7 +14,8 @@ extern mod std; -use core::pipes::{spawn_service, recv}; +use core::cell::Cell; +use core::pipes::*; use std::time::precise_time_s; proto! pingpong ( @@ -70,6 +71,52 @@ macro_rules! follow ( ) ) + +/** Spawn a task to provide a service. + +It takes an initialization function that produces a send and receive +endpoint. The send endpoint is returned to the caller and the receive +endpoint is passed to the new task. + +*/ +pub fn spawn_service<T:Owned,Tb:Owned>( + init: extern fn() -> (SendPacketBuffered<T, Tb>, + RecvPacketBuffered<T, Tb>), + service: ~fn(v: RecvPacketBuffered<T, Tb>)) + -> SendPacketBuffered<T, Tb> { + let (client, server) = init(); + + // This is some nasty gymnastics required to safely move the pipe + // into a new task. + let server = Cell(server); + do task::spawn { + service(server.take()); + } + + client +} + +/** Like `spawn_service_recv`, but for protocols that start in the +receive state. + +*/ +pub fn spawn_service_recv<T:Owned,Tb:Owned>( + init: extern fn() -> (RecvPacketBuffered<T, Tb>, + SendPacketBuffered<T, Tb>), + service: ~fn(v: SendPacketBuffered<T, Tb>)) + -> RecvPacketBuffered<T, Tb> { + let (client, server) = init(); + + // This is some nasty gymnastics required to safely move the pipe + // into a new task. + let server = Cell(server); + do task::spawn { + service(server.take()) + } + + client +} + fn switch<T:Owned,Tb:Owned,U>(+endp: core::pipes::RecvPacketBuffered<T, Tb>, f: &fn(+v: Option<T>) -> U) -> U { f(core::pipes::try_recv(endp)) diff --git a/src/test/run-pass/pipe-detect-term.rs b/src/test/run-pass/pipe-detect-term.rs index 6afa9e29349..bd0ffa64590 100644 --- a/src/test/run-pass/pipe-detect-term.rs +++ b/src/test/run-pass/pipe-detect-term.rs @@ -18,7 +18,7 @@ extern mod std; use std::timer::sleep; use std::uv; -use core::pipes; +use core::cell::Cell; use core::pipes::{try_recv, recv}; proto! oneshot ( @@ -30,12 +30,14 @@ proto! oneshot ( pub fn main() { let iotask = &uv::global_loop::get(); - pipes::spawn_service(oneshot::init, |p| { - match try_recv(p) { + let (chan, port) = oneshot::init(); + let port = Cell(port); + do spawn { + match try_recv(port.take()) { Some(*) => { fail!() } None => { } } - }); + } sleep(iotask, 100); diff --git a/src/test/run-pass/pipe-select.rs b/src/test/run-pass/pipe-select.rs index 221ecbfcf02..12d60c9d6ab 100644 --- a/src/test/run-pass/pipe-select.rs +++ b/src/test/run-pass/pipe-select.rs @@ -17,8 +17,9 @@ extern mod std; use std::timer::sleep; use std::uv; +use core::cell::Cell; use core::pipes; -use core::pipes::{recv, select}; +use core::pipes::*; proto! oneshot ( waiting:send { @@ -32,13 +33,30 @@ proto! stream ( } ) +pub fn spawn_service<T:Owned,Tb:Owned>( + init: extern fn() -> (SendPacketBuffered<T, Tb>, + RecvPacketBuffered<T, Tb>), + service: ~fn(v: RecvPacketBuffered<T, Tb>)) + -> SendPacketBuffered<T, Tb> { + let (client, server) = init(); + + // This is some nasty gymnastics required to safely move the pipe + // into a new task. + let server = Cell(server); + do task::spawn { + service(server.take()); + } + + client +} + pub fn main() { use oneshot::client::*; use stream::client::*; let iotask = &uv::global_loop::get(); - let c = pipes::spawn_service(stream::init, |p| { + let c = spawn_service(stream::init, |p| { error!("waiting for pipes"); let stream::send(x, p) = recv(p); error!("got pipes"); diff --git a/src/test/run-pass/pipe-sleep.rs b/src/test/run-pass/pipe-sleep.rs index 57d72edd0a4..86ffc96e89a 100644 --- a/src/test/run-pass/pipe-sleep.rs +++ b/src/test/run-pass/pipe-sleep.rs @@ -13,8 +13,9 @@ extern mod std; use std::timer::sleep; use std::uv; +use core::cell::Cell; use core::pipes; -use core::pipes::recv; +use core::pipes::*; proto! oneshot ( waiting:send { @@ -22,10 +23,35 @@ proto! oneshot ( } ) + +/** Spawn a task to provide a service. + +It takes an initialization function that produces a send and receive +endpoint. The send endpoint is returned to the caller and the receive +endpoint is passed to the new task. + +*/ +pub fn spawn_service<T:Owned,Tb:Owned>( + init: extern fn() -> (SendPacketBuffered<T, Tb>, + RecvPacketBuffered<T, Tb>), + service: ~fn(v: RecvPacketBuffered<T, Tb>)) + -> SendPacketBuffered<T, Tb> { + let (client, server) = init(); + + // This is some nasty gymnastics required to safely move the pipe + // into a new task. + let server = Cell(server); + do task::spawn { + service(server.take()); + } + + client +} + pub fn main() { use oneshot::client::*; - let c = pipes::spawn_service(oneshot::init, |p| { recv(p); }); + let c = spawn_service(oneshot::init, |p| { recv(p); }); let iotask = &uv::global_loop::get(); sleep(iotask, 500); |
