@@ -581,14 +581,14 @@ that vector. The index points to an endpoint that has either been
581
581
closed by the sender or has a message waiting to be received.
582
582
583
583
*/
584
- fn wait_many ( pkts : & [ * packet_header ] ) -> uint {
584
+ fn wait_many < T : selectable > ( pkts : & [ T ] ) -> uint {
585
585
let this = rustrt:: rust_get_task ( ) ;
586
586
587
587
rustrt:: task_clear_event_reject ( this) ;
588
588
let mut data_avail = false ;
589
589
let mut ready_packet = pkts. len ( ) ;
590
590
for pkts. eachi |i, p| unsafe {
591
- let p = unsafe { & * p } ;
591
+ let p = unsafe { & * p. header ( ) } ;
592
592
let old = p. mark_blocked ( this) ;
593
593
match old {
594
594
full | terminated => {
@@ -605,7 +605,7 @@ fn wait_many(pkts: &[*packet_header]) -> uint {
605
605
while !data_avail {
606
606
debug ! { "sleeping on %? packets" , pkts. len( ) } ;
607
607
let event = wait_event ( this) as * packet_header ;
608
- let pos = vec:: position ( pkts, |p| p == event) ;
608
+ let pos = vec:: position ( pkts, |p| p. header ( ) == event) ;
609
609
610
610
match pos {
611
611
some( i) => {
@@ -618,13 +618,13 @@ fn wait_many(pkts: &[*packet_header]) -> uint {
618
618
619
619
debug ! { "%?" , pkts[ ready_packet] } ;
620
620
621
- for pkts. each |p| { unsafe { ( * p) . unblock ( ) } }
621
+ for pkts. each |p| { unsafe { ( * p. header ( ) ) . unblock ( ) } }
622
622
623
623
debug ! ( "%?, %?" , ready_packet, pkts[ ready_packet] ) ;
624
624
625
625
unsafe {
626
- assert ( * pkts[ ready_packet] ) . state == full
627
- || ( * pkts[ ready_packet] ) . state == terminated;
626
+ assert ( * pkts[ ready_packet] . header ( ) ) . state == full
627
+ || ( * pkts[ ready_packet] . header ( ) ) . state == terminated;
628
628
}
629
629
630
630
ready_packet
@@ -686,7 +686,7 @@ impl *packet_header: selectable {
686
686
687
687
/// Returns the index of an endpoint that is ready to receive.
688
688
fn selecti < T : selectable > ( endpoints : & [ T ] ) -> uint {
689
- wait_many ( endpoints. map ( |p| p . header ( ) ) )
689
+ wait_many ( endpoints)
690
690
}
691
691
692
692
/// Returns 0 or 1 depending on which endpoint is ready to receive
0 commit comments