Skip to content

Commit 71339d9

Browse files
committed
Pipe code cleanup
1 parent 877ebed commit 71339d9

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed

src/libcore/pipes.rs

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ fn try_recv<T: send>(-p: recv_packet<T>) -> option<T> {
133133
rustrt::task_clear_event_reject(this);
134134
let old_state = swap_state_acq(p.header.state,
135135
blocked);
136-
#debug("%?", old_state);
137136
alt old_state {
138137
empty {
139138
#debug("no data available on %?, going to sleep.", p_);
@@ -230,7 +229,7 @@ impl private_methods for packet_header {
230229

231230
#[doc = "Returns when one of the packet headers reports data is
232231
available."]
233-
fn wait_many(pkts: ~[&a.packet_header]) -> uint {
232+
fn wait_many(pkts: &[&a.packet_header]) -> uint {
234233
let this = rustrt::rust_get_task();
235234

236235
rustrt::task_clear_event_reject(this);
@@ -283,39 +282,30 @@ fn select2<A: send, B: send>(
283282
+b: recv_packet<B>)
284283
-> either<(option<A>, recv_packet<B>), (recv_packet<A>, option<B>)>
285284
{
286-
let a = unsafe { uniquify(a.unwrap()) };
287-
let b = unsafe { uniquify(b.unwrap()) };
288-
let i = {
289-
let headers = ~[&a.header,
290-
&b.header];
291-
wait_many(headers)
292-
};
285+
let i = wait_many([a.header(), b.header()]/_);
293286

294287
unsafe {
295288
alt i {
296-
0 { left((try_recv(recv_packet(transmute(a))),
297-
recv_packet(transmute(b)))) }
298-
1 { right((recv_packet(transmute(a)),
299-
try_recv(recv_packet(transmute(b))))) }
289+
0 { left((try_recv(a), b)) }
290+
1 { right((a, try_recv(b))) }
300291
_ { fail "select2 return an invalid packet" }
301292
}
302293
}
303294
}
304295

296+
fn selecti<T: send>(endpoints: &[&recv_packet<T>]) -> uint {
297+
wait_many(endpoints.map(|p| p.header()))
298+
}
299+
305300
#[doc = "Waits on a set of endpoints. Returns a message, its index,
306301
and a list of the remaining endpoints."]
307302
fn select<T: send>(+endpoints: ~[recv_packet<T>])
308303
-> (uint, option<T>, ~[recv_packet<T>])
309304
{
310-
let endpoints = vec::map_consume(
311-
endpoints,
312-
|p| unsafe { uniquify(p.unwrap()) });
313-
let endpoints_r = vec::view(endpoints, 0, endpoints.len());
314-
let ready = wait_many(endpoints_r.map_r(|p| &p.header));
305+
let ready = wait_many(endpoints.map(|p| p.header()));
315306
let mut remaining = ~[];
316307
let mut result = none;
317308
do vec::consume(endpoints) |i, p| {
318-
let p = recv_packet(unsafe { unsafe::transmute(p) });
319309
if i == ready {
320310
result = try_recv(p);
321311
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ fn main() {
5151
});
5252

5353
let (c1, p1) = oneshot::init();
54-
let (c2, p2) = oneshot::init();
54+
let (_c2, p2) = oneshot::init();
5555

5656
let c = send(c, (p1, p2));
5757

5858
sleep(iotask, 1000);
5959

6060
signal(c1);
6161

62-
let (c1, p1) = oneshot::init();
62+
let (_c1, p1) = oneshot::init();
6363
let (c2, p2) = oneshot::init();
6464

6565
send(c, (p1, p2));

0 commit comments

Comments
 (0)