about summary refs log tree commit diff
path: root/src/test/bench
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-04-01 18:17:16 -0700
committerBrian Anderson <banderson@mozilla.com>2013-04-18 14:07:35 -0700
commitab08b4fbfde7e9cc9e0de07aed17b4d4e06ccc3e (patch)
tree2e3a7fb6cf01cd07ff35f254d43ef00e8beed28c /src/test/bench
parentb329f2fa82185c9e7c6bbbdf26270dd839618e9c (diff)
downloadrust-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/test/bench')
-rw-r--r--src/test/bench/pingpong.rs49
1 files changed, 48 insertions, 1 deletions
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))