Skip to content

Commit ab08b4f

Browse files
committed
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
1 parent b329f2f commit ab08b4f

File tree

5 files changed

+102
-55
lines changed

5 files changed

+102
-55
lines changed

src/libcore/pipes.rs

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ bounded and unbounded protocols allows for less code duplication.
8383
*/
8484

8585
use cast::{forget, reinterpret_cast, transmute};
86-
use cell::Cell;
8786
use either::{Either, Left, Right};
8887
use kinds::Owned;
8988
use libc;
@@ -902,51 +901,6 @@ pub fn entangle<T>() -> (SendPacket<T>, RecvPacket<T>) {
902901
(SendPacket(p), RecvPacket(p))
903902
}
904903
905-
/** Spawn a task to provide a service.
906-
907-
It takes an initialization function that produces a send and receive
908-
endpoint. The send endpoint is returned to the caller and the receive
909-
endpoint is passed to the new task.
910-
911-
*/
912-
pub fn spawn_service<T:Owned,Tb:Owned>(
913-
init: extern fn() -> (SendPacketBuffered<T, Tb>,
914-
RecvPacketBuffered<T, Tb>),
915-
service: ~fn(v: RecvPacketBuffered<T, Tb>))
916-
-> SendPacketBuffered<T, Tb> {
917-
let (client, server) = init();
918-
919-
// This is some nasty gymnastics required to safely move the pipe
920-
// into a new task.
921-
let server = Cell(server);
922-
do task::spawn {
923-
service(server.take());
924-
}
925-
926-
client
927-
}
928-
929-
/** Like `spawn_service_recv`, but for protocols that start in the
930-
receive state.
931-
932-
*/
933-
pub fn spawn_service_recv<T:Owned,Tb:Owned>(
934-
init: extern fn() -> (RecvPacketBuffered<T, Tb>,
935-
SendPacketBuffered<T, Tb>),
936-
service: ~fn(v: SendPacketBuffered<T, Tb>))
937-
-> RecvPacketBuffered<T, Tb> {
938-
let (client, server) = init();
939-
940-
// This is some nasty gymnastics required to safely move the pipe
941-
// into a new task.
942-
let server = Cell(server);
943-
do task::spawn {
944-
service(server.take())
945-
}
946-
947-
client
948-
}
949-
950904
pub mod rt {
951905
use option::{None, Option, Some};
952906

src/test/bench/pingpong.rs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414

1515
extern mod std;
1616

17-
use core::pipes::{spawn_service, recv};
17+
use core::cell::Cell;
18+
use core::pipes::*;
1819
use std::time::precise_time_s;
1920

2021
proto! pingpong (
@@ -70,6 +71,52 @@ macro_rules! follow (
7071
)
7172
)
7273

74+
75+
/** Spawn a task to provide a service.
76+
77+
It takes an initialization function that produces a send and receive
78+
endpoint. The send endpoint is returned to the caller and the receive
79+
endpoint is passed to the new task.
80+
81+
*/
82+
pub fn spawn_service<T:Owned,Tb:Owned>(
83+
init: extern fn() -> (SendPacketBuffered<T, Tb>,
84+
RecvPacketBuffered<T, Tb>),
85+
service: ~fn(v: RecvPacketBuffered<T, Tb>))
86+
-> SendPacketBuffered<T, Tb> {
87+
let (client, server) = init();
88+
89+
// This is some nasty gymnastics required to safely move the pipe
90+
// into a new task.
91+
let server = Cell(server);
92+
do task::spawn {
93+
service(server.take());
94+
}
95+
96+
client
97+
}
98+
99+
/** Like `spawn_service_recv`, but for protocols that start in the
100+
receive state.
101+
102+
*/
103+
pub fn spawn_service_recv<T:Owned,Tb:Owned>(
104+
init: extern fn() -> (RecvPacketBuffered<T, Tb>,
105+
SendPacketBuffered<T, Tb>),
106+
service: ~fn(v: SendPacketBuffered<T, Tb>))
107+
-> RecvPacketBuffered<T, Tb> {
108+
let (client, server) = init();
109+
110+
// This is some nasty gymnastics required to safely move the pipe
111+
// into a new task.
112+
let server = Cell(server);
113+
do task::spawn {
114+
service(server.take())
115+
}
116+
117+
client
118+
}
119+
73120
fn switch<T:Owned,Tb:Owned,U>(+endp: core::pipes::RecvPacketBuffered<T, Tb>,
74121
f: &fn(+v: Option<T>) -> U) -> U {
75122
f(core::pipes::try_recv(endp))

src/test/run-pass/pipe-detect-term.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ extern mod std;
1818
use std::timer::sleep;
1919
use std::uv;
2020

21-
use core::pipes;
21+
use core::cell::Cell;
2222
use core::pipes::{try_recv, recv};
2323

2424
proto! oneshot (
@@ -30,12 +30,14 @@ proto! oneshot (
3030
pub fn main() {
3131
let iotask = &uv::global_loop::get();
3232

33-
pipes::spawn_service(oneshot::init, |p| {
34-
match try_recv(p) {
33+
let (chan, port) = oneshot::init();
34+
let port = Cell(port);
35+
do spawn {
36+
match try_recv(port.take()) {
3537
Some(*) => { fail!() }
3638
None => { }
3739
}
38-
});
40+
}
3941

4042
sleep(iotask, 100);
4143

src/test/run-pass/pipe-select.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ extern mod std;
1717
use std::timer::sleep;
1818
use std::uv;
1919

20+
use core::cell::Cell;
2021
use core::pipes;
21-
use core::pipes::{recv, select};
22+
use core::pipes::*;
2223

2324
proto! oneshot (
2425
waiting:send {
@@ -32,13 +33,30 @@ proto! stream (
3233
}
3334
)
3435

36+
pub fn spawn_service<T:Owned,Tb:Owned>(
37+
init: extern fn() -> (SendPacketBuffered<T, Tb>,
38+
RecvPacketBuffered<T, Tb>),
39+
service: ~fn(v: RecvPacketBuffered<T, Tb>))
40+
-> SendPacketBuffered<T, Tb> {
41+
let (client, server) = init();
42+
43+
// This is some nasty gymnastics required to safely move the pipe
44+
// into a new task.
45+
let server = Cell(server);
46+
do task::spawn {
47+
service(server.take());
48+
}
49+
50+
client
51+
}
52+
3553
pub fn main() {
3654
use oneshot::client::*;
3755
use stream::client::*;
3856

3957
let iotask = &uv::global_loop::get();
4058

41-
let c = pipes::spawn_service(stream::init, |p| {
59+
let c = spawn_service(stream::init, |p| {
4260
error!("waiting for pipes");
4361
let stream::send(x, p) = recv(p);
4462
error!("got pipes");

src/test/run-pass/pipe-sleep.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,45 @@
1313
extern mod std;
1414
use std::timer::sleep;
1515
use std::uv;
16+
use core::cell::Cell;
1617
use core::pipes;
17-
use core::pipes::recv;
18+
use core::pipes::*;
1819

1920
proto! oneshot (
2021
waiting:send {
2122
signal -> !
2223
}
2324
)
2425

26+
27+
/** Spawn a task to provide a service.
28+
29+
It takes an initialization function that produces a send and receive
30+
endpoint. The send endpoint is returned to the caller and the receive
31+
endpoint is passed to the new task.
32+
33+
*/
34+
pub fn spawn_service<T:Owned,Tb:Owned>(
35+
init: extern fn() -> (SendPacketBuffered<T, Tb>,
36+
RecvPacketBuffered<T, Tb>),
37+
service: ~fn(v: RecvPacketBuffered<T, Tb>))
38+
-> SendPacketBuffered<T, Tb> {
39+
let (client, server) = init();
40+
41+
// This is some nasty gymnastics required to safely move the pipe
42+
// into a new task.
43+
let server = Cell(server);
44+
do task::spawn {
45+
service(server.take());
46+
}
47+
48+
client
49+
}
50+
2551
pub fn main() {
2652
use oneshot::client::*;
2753

28-
let c = pipes::spawn_service(oneshot::init, |p| { recv(p); });
54+
let c = spawn_service(oneshot::init, |p| { recv(p); });
2955

3056
let iotask = &uv::global_loop::get();
3157
sleep(iotask, 500);

0 commit comments

Comments
 (0)