@@ -666,12 +666,10 @@ fn select2<A: send, Ab: send, B: send, Bb: send>(
666
666
{
667
667
let i = wait_many ( [ a. header ( ) , b. header ( ) ] /_) ;
668
668
669
- unsafe {
670
- match i {
671
- 0 => Left ( ( try_recv ( a) , b) ) ,
672
- 1 => Right ( ( a, try_recv ( b) ) ) ,
673
- _ => fail ~"select2 return an invalid packet"
674
- }
669
+ match i {
670
+ 0 => Left ( ( try_recv ( a) , b) ) ,
671
+ 1 => Right ( ( a, try_recv ( b) ) ) ,
672
+ _ => fail ~"select2 return an invalid packet"
675
673
}
676
674
}
677
675
@@ -706,17 +704,9 @@ fn select<T: send, Tb: send>(+endpoints: ~[recv_packet_buffered<T, Tb>])
706
704
-> ( uint , option < T > , ~[ recv_packet_buffered < T , Tb > ] )
707
705
{
708
706
let ready = wait_many ( endpoints. map ( |p| p. header ( ) ) ) ;
709
- let mut remaining = ~[ ] ;
710
- let mut result = none;
711
- do vec:: consume ( endpoints) |i, p| {
712
- if i == ready {
713
- result = try_recv ( p) ;
714
- }
715
- else {
716
- vec:: push ( remaining, p) ;
717
- }
718
- }
719
-
707
+ let mut remaining = endpoints;
708
+ let port = vec:: swap_remove ( remaining, ready) ;
709
+ let result = try_recv ( port) ;
720
710
( ready, result, remaining)
721
711
}
722
712
@@ -1054,12 +1044,7 @@ struct PortSet<T: send> : recv<T> {
1054
1044
}
1055
1045
none => {
1056
1046
// Remove this port.
1057
- let mut ports_ = ~[ ] ;
1058
- ports <-> ports_;
1059
- vec:: consume ( ports_,
1060
- |j, x| if i != j {
1061
- vec:: push ( ports, x)
1062
- } ) ;
1047
+ let _ = vec:: swap_remove ( ports, i) ;
1063
1048
}
1064
1049
}
1065
1050
}
0 commit comments