about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-02-05 22:46:33 -0800
committerbors <bors@rust-lang.org>2014-02-05 22:46:33 -0800
commit8dc06802b241ea30a8aadca1f8451a646f2bc3c0 (patch)
tree36637b8b21209a35a856c32a5c7b789c0dd7e4e5
parent9a672f98e5a7bef086cb56420b095daeeb7ef1ea (diff)
parent7b81cc09c14920f3a39362a22ed3a747eb2d8527 (diff)
downloadrust-8dc06802b241ea30a8aadca1f8451a646f2bc3c0.tar.gz
rust-8dc06802b241ea30a8aadca1f8451a646f2bc3c0.zip
auto merge of #12054 : alexcrichton/rust/less-flaky-udp, r=brson
I have a hunch this just deadlocked the windows bots. Due to UDP being a lossy
protocol, I don't think we can guarantee that the server can receive both
packets, so just listen for one of them.
-rw-r--r--src/libstd/io/net/udp.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/libstd/io/net/udp.rs b/src/libstd/io/net/udp.rs
index 3c02f563847..ae99101e179 100644
--- a/src/libstd/io/net/udp.rs
+++ b/src/libstd/io/net/udp.rs
@@ -335,17 +335,18 @@ mod test {
         let sock2 = UdpSocket::bind(addr2).unwrap();
 
         let (p, c) = SharedChan::new();
+        let (serv_port, serv_chan) = Chan::new();
 
         spawn(proc() {
             let mut sock2 = sock2;
             let mut buf = [0, 1];
 
-            for _ in p.iter() {
-                match sock2.recvfrom(buf) {
-                    Ok(..) => {}
-                    Err(e) => fail!("failed receive: {}", e),
-                }
+            p.recv();
+            match sock2.recvfrom(buf) {
+                Ok(..) => {}
+                Err(e) => fail!("failed receive: {}", e),
             }
+            serv_chan.send(());
         });
 
         let sock3 = sock1.clone();
@@ -355,16 +356,18 @@ mod test {
         spawn(proc() {
             let mut sock3 = sock3;
             match sock3.sendto([1], addr2) {
-                Ok(..) => c2.send(()),
+                Ok(..) => { let _ = c2.try_send(()); }
                 Err(..) => {}
             }
             done.send(());
         });
         match sock1.sendto([2], addr2) {
-            Ok(..) => c.send(()),
+            Ok(..) => { let _ = c.try_send(()); }
             Err(..) => {}
         }
+        drop(c);
 
         p.recv();
+        serv_port.recv();
     })
 }