about summary refs log tree commit diff
path: root/src/libstd/io/net
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-02-05 16:09:59 -0800
committerAlex Crichton <alex@alexcrichton.com>2014-02-05 18:47:49 -0800
commit7b81cc09c14920f3a39362a22ed3a747eb2d8527 (patch)
treea36c42ed600512127f616133cd9e8133cba3fdd9 /src/libstd/io/net
parent6aad3bf944da209d1852c51144ba584de400a10c (diff)
downloadrust-7b81cc09c14920f3a39362a22ed3a747eb2d8527.tar.gz
rust-7b81cc09c14920f3a39362a22ed3a747eb2d8527.zip
Make a double-write UDP test more robust
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.
Diffstat (limited to 'src/libstd/io/net')
-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();
     })
 }