Blame SOURCES/0001-Deal-with-EINTR-in-net-timeout-tests.patch

c3f84f
From f107514aef0b25b0d959941df1e45b18a478151b Mon Sep 17 00:00:00 2001
c3f84f
From: Josh Stone <jistone@redhat.com>
c3f84f
Date: Fri, 30 Nov 2018 15:33:40 -0800
c3f84f
Subject: [PATCH] Deal with EINTR in net timeout tests
c3f84f
c3f84f
We've seen sporadic QE failures in the timeout tests on this assertion:
c3f84f
c3f84f
    assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
c3f84f
c3f84f
So there's an error, but not either of the expected kinds.  Adding a
c3f84f
format to show the kind revealed `ErrorKind::Interrupted` (`EINTR`).
c3f84f
c3f84f
For the cases that were using `read`, we can just use `read_exact` to
c3f84f
keep trying after interruption.  For those using `recv_from`, we have to
c3f84f
manually loop until we get a non-interrupted result.
c3f84f
---
c3f84f
 src/libstd/net/tcp.rs          | 10 ++++++----
c3f84f
 src/libstd/net/udp.rs          | 20 ++++++++++++++++----
c3f84f
 src/libstd/sys/unix/ext/net.rs | 10 ++++++----
c3f84f
 3 files changed, 28 insertions(+), 12 deletions(-)
c3f84f
c3f84f
diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs
c3f84f
index ad212a547579..be797803233a 100644
c3f84f
--- a/src/libstd/net/tcp.rs
c3f84f
+++ b/src/libstd/net/tcp.rs
c3f84f
@@ -1548,8 +1548,9 @@ mod tests {
c3f84f
 
c3f84f
         let mut buf = [0; 10];
c3f84f
         let start = Instant::now();
c3f84f
-        let kind = stream.read(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
c3f84f
+        let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
c3f84f
+        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                "unexpected_error: {:?}", kind);
c3f84f
         assert!(start.elapsed() > Duration::from_millis(400));
c3f84f
         drop(listener);
c3f84f
     }
c3f84f
@@ -1570,8 +1571,9 @@ mod tests {
c3f84f
         assert_eq!(b"hello world", &buf[..]);
c3f84f
 
c3f84f
         let start = Instant::now();
c3f84f
-        let kind = stream.read(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
c3f84f
+        let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
c3f84f
+        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                "unexpected_error: {:?}", kind);
c3f84f
         assert!(start.elapsed() > Duration::from_millis(400));
c3f84f
         drop(listener);
c3f84f
     }
c3f84f
diff --git a/src/libstd/net/udp.rs b/src/libstd/net/udp.rs
c3f84f
index 0ebe3284b4f0..fc68abae05a0 100644
c3f84f
--- a/src/libstd/net/udp.rs
c3f84f
+++ b/src/libstd/net/udp.rs
c3f84f
@@ -1030,8 +1030,14 @@ mod tests {
c3f84f
         let mut buf = [0; 10];
c3f84f
 
c3f84f
         let start = Instant::now();
c3f84f
-        let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
c3f84f
+        loop {
c3f84f
+            let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
c3f84f
+            if kind != ErrorKind::Interrupted {
c3f84f
+                assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                        "unexpected_error: {:?}", kind);
c3f84f
+                break;
c3f84f
+            }
c3f84f
+        }
c3f84f
         assert!(start.elapsed() > Duration::from_millis(400));
c3f84f
     }
c3f84f
 
c3f84f
@@ -1049,8 +1055,14 @@ mod tests {
c3f84f
         assert_eq!(b"hello world", &buf[..]);
c3f84f
 
c3f84f
         let start = Instant::now();
c3f84f
-        let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
c3f84f
+        loop {
c3f84f
+            let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
c3f84f
+            if kind != ErrorKind::Interrupted {
c3f84f
+                assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                        "unexpected_error: {:?}", kind);
c3f84f
+                break;
c3f84f
+            }
c3f84f
+        }
c3f84f
         assert!(start.elapsed() > Duration::from_millis(400));
c3f84f
     }
c3f84f
 
c3f84f
diff --git a/src/libstd/sys/unix/ext/net.rs b/src/libstd/sys/unix/ext/net.rs
c3f84f
index 55f43ccd7db4..737437c76b7c 100644
c3f84f
--- a/src/libstd/sys/unix/ext/net.rs
c3f84f
+++ b/src/libstd/sys/unix/ext/net.rs
c3f84f
@@ -1654,8 +1654,9 @@ mod test {
c3f84f
         or_panic!(stream.set_read_timeout(Some(Duration::from_millis(1000))));
c3f84f
 
c3f84f
         let mut buf = [0; 10];
c3f84f
-        let kind = stream.read(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
c3f84f
+        let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
c3f84f
+        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                "unexpected_error: {:?}", kind);
c3f84f
     }
c3f84f
 
c3f84f
     #[test]
c3f84f
@@ -1675,8 +1676,9 @@ mod test {
c3f84f
         or_panic!(stream.read(&mut buf));
c3f84f
         assert_eq!(b"hello world", &buf[..]);
c3f84f
 
c3f84f
-        let kind = stream.read(&mut buf).err().expect("expected error").kind();
c3f84f
-        assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
c3f84f
+        let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
c3f84f
+        assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
c3f84f
+                "unexpected_error: {:?}", kind);
c3f84f
     }
c3f84f
 
c3f84f
     // Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
c3f84f
-- 
c3f84f
2.19.1
c3f84f