@@ -133,7 +133,6 @@ fn try_recv<T: send>(-p: recv_packet<T>) -> option<T> {
133
133
rustrt:: task_clear_event_reject ( this) ;
134
134
let old_state = swap_state_acq ( p. header . state ,
135
135
blocked) ;
136
- #debug ( "%?" , old_state) ;
137
136
alt old_state {
138
137
empty {
139
138
#debug( "no data available on %?, going to sleep." , p_) ;
@@ -230,7 +229,7 @@ impl private_methods for packet_header {
230
229
231
230
#[ doc = "Returns when one of the packet headers reports data is
232
231
available." ]
233
- fn wait_many ( pkts : ~ [ & a. packet_header ] ) -> uint {
232
+ fn wait_many ( pkts : & [ & a. packet_header ] ) -> uint {
234
233
let this = rustrt:: rust_get_task ( ) ;
235
234
236
235
rustrt:: task_clear_event_reject ( this) ;
@@ -283,39 +282,30 @@ fn select2<A: send, B: send>(
283
282
+b : recv_packet < B > )
284
283
-> either < ( option < A > , recv_packet < B > ) , ( recv_packet < A > , option < B > ) >
285
284
{
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 ( ) ] /_) ;
293
286
294
287
unsafe {
295
288
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) ) ) }
300
291
_ { fail "select2 return an invalid packet" }
301
292
}
302
293
}
303
294
}
304
295
296
+ fn selecti < T : send > ( endpoints : & [ & recv_packet < T > ] ) -> uint {
297
+ wait_many ( endpoints. map ( |p| p. header ( ) ) )
298
+ }
299
+
305
300
#[ doc = "Waits on a set of endpoints. Returns a message, its index,
306
301
and a list of the remaining endpoints." ]
307
302
fn select < T : send > ( +endpoints : ~[ recv_packet < T > ] )
308
303
-> ( uint , option < T > , ~[ recv_packet < T > ] )
309
304
{
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 ( ) ) ) ;
315
306
let mut remaining = ~[ ] ;
316
307
let mut result = none;
317
308
do vec:: consume ( endpoints) |i, p| {
318
- let p = recv_packet ( unsafe { unsafe :: transmute ( p) } ) ;
319
309
if i == ready {
320
310
result = try_recv ( p) ;
321
311
}
0 commit comments