Skip to content

Commit 25c3754

Browse files
committed
Auto merge of #56394 - cuviper:interrupted-timeout, r=sfackler
Deal with EINTR in net timeout tests We've seen sporadic QE failures in the timeout tests on this assertion: assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut); So there's an error, but not either of the expected kinds. Adding a format to show the kind revealed `ErrorKind::Interrupted` (`EINTR`). For the cases that were using `read`, we can just use `read_exact` to keep trying after interruption. For those using `recv_from`, we have to manually loop until we get a non-interrupted result.
2 parents a563ceb + f107514 commit 25c3754

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

src/libstd/net/tcp.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1548,8 +1548,9 @@ mod tests {
15481548

15491549
let mut buf = [0; 10];
15501550
let start = Instant::now();
1551-
let kind = stream.read(&mut buf).err().expect("expected error").kind();
1552-
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
1551+
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
1552+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1553+
"unexpected_error: {:?}", kind);
15531554
assert!(start.elapsed() > Duration::from_millis(400));
15541555
drop(listener);
15551556
}
@@ -1570,8 +1571,9 @@ mod tests {
15701571
assert_eq!(b"hello world", &buf[..]);
15711572

15721573
let start = Instant::now();
1573-
let kind = stream.read(&mut buf).err().expect("expected error").kind();
1574-
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
1574+
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
1575+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1576+
"unexpected_error: {:?}", kind);
15751577
assert!(start.elapsed() > Duration::from_millis(400));
15761578
drop(listener);
15771579
}

src/libstd/net/udp.rs

+16-4
Original file line numberDiff line numberDiff line change
@@ -1030,8 +1030,14 @@ mod tests {
10301030
let mut buf = [0; 10];
10311031

10321032
let start = Instant::now();
1033-
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
1034-
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
1033+
loop {
1034+
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
1035+
if kind != ErrorKind::Interrupted {
1036+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1037+
"unexpected_error: {:?}", kind);
1038+
break;
1039+
}
1040+
}
10351041
assert!(start.elapsed() > Duration::from_millis(400));
10361042
}
10371043

@@ -1049,8 +1055,14 @@ mod tests {
10491055
assert_eq!(b"hello world", &buf[..]);
10501056

10511057
let start = Instant::now();
1052-
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
1053-
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
1058+
loop {
1059+
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
1060+
if kind != ErrorKind::Interrupted {
1061+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1062+
"unexpected_error: {:?}", kind);
1063+
break;
1064+
}
1065+
}
10541066
assert!(start.elapsed() > Duration::from_millis(400));
10551067
}
10561068

src/libstd/sys/unix/ext/net.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1654,8 +1654,9 @@ mod test {
16541654
or_panic!(stream.set_read_timeout(Some(Duration::from_millis(1000))));
16551655

16561656
let mut buf = [0; 10];
1657-
let kind = stream.read(&mut buf).err().expect("expected error").kind();
1658-
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
1657+
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
1658+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1659+
"unexpected_error: {:?}", kind);
16591660
}
16601661

16611662
#[test]
@@ -1675,8 +1676,9 @@ mod test {
16751676
or_panic!(stream.read(&mut buf));
16761677
assert_eq!(b"hello world", &buf[..]);
16771678

1678-
let kind = stream.read(&mut buf).err().expect("expected error").kind();
1679-
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
1679+
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
1680+
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
1681+
"unexpected_error: {:?}", kind);
16801682
}
16811683

16821684
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors

0 commit comments

Comments
 (0)