Skip to content

Commit 7b81cc0

Browse files
committed
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.
1 parent 6aad3bf commit 7b81cc0

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/libstd/io/net/udp.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -335,17 +335,18 @@ mod test {
335335
let sock2 = UdpSocket::bind(addr2).unwrap();
336336

337337
let (p, c) = SharedChan::new();
338+
let (serv_port, serv_chan) = Chan::new();
338339

339340
spawn(proc() {
340341
let mut sock2 = sock2;
341342
let mut buf = [0, 1];
342343

343-
for _ in p.iter() {
344-
match sock2.recvfrom(buf) {
345-
Ok(..) => {}
346-
Err(e) => fail!("failed receive: {}", e),
347-
}
344+
p.recv();
345+
match sock2.recvfrom(buf) {
346+
Ok(..) => {}
347+
Err(e) => fail!("failed receive: {}", e),
348348
}
349+
serv_chan.send(());
349350
});
350351

351352
let sock3 = sock1.clone();
@@ -355,16 +356,18 @@ mod test {
355356
spawn(proc() {
356357
let mut sock3 = sock3;
357358
match sock3.sendto([1], addr2) {
358-
Ok(..) => c2.send(()),
359+
Ok(..) => { let _ = c2.try_send(()); }
359360
Err(..) => {}
360361
}
361362
done.send(());
362363
});
363364
match sock1.sendto([2], addr2) {
364-
Ok(..) => c.send(()),
365+
Ok(..) => { let _ = c.try_send(()); }
365366
Err(..) => {}
366367
}
368+
drop(c);
367369

368370
p.recv();
371+
serv_port.recv();
369372
})
370373
}

0 commit comments

Comments
 (0)