diff options
| author | Lukas Markeffsky <@> | 2024-03-06 18:01:09 +0100 |
|---|---|---|
| committer | Lukas Markeffsky <@> | 2024-03-06 18:01:09 +0100 |
| commit | 9abe47e3720d8fc236464a9295389fc0b21f67e5 (patch) | |
| tree | fb2bc420a215526af667b297cb5b9fce5d24ae12 /library/std/src/net/tcp | |
| parent | 3314d5ce4c209e840c2e4b2c4442f6e031ae0989 (diff) | |
| download | rust-9abe47e3720d8fc236464a9295389fc0b21f67e5.tar.gz rust-9abe47e3720d8fc236464a9295389fc0b21f67e5.zip | |
fix `close_read_wakes_up` test
Diffstat (limited to 'library/std/src/net/tcp')
| -rw-r--r-- | library/std/src/net/tcp/tests.rs | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/library/std/src/net/tcp/tests.rs b/library/std/src/net/tcp/tests.rs index b24b851a645..ec8b62f9687 100644 --- a/library/std/src/net/tcp/tests.rs +++ b/library/std/src/net/tcp/tests.rs @@ -544,30 +544,33 @@ fn close_readwrite_smoke() { } #[test] +// FIXME: https://github.com/fortanix/rust-sgx/issues/110 #[cfg_attr(target_env = "sgx", ignore)] +// On windows, shutdown will not wake up blocking I/O operations. +#[cfg_attr(windows, ignore)] fn close_read_wakes_up() { each_ip(&mut |addr| { - let a = t!(TcpListener::bind(&addr)); - let (tx1, rx) = channel::<()>(); + let listener = t!(TcpListener::bind(&addr)); let _t = thread::spawn(move || { - let _s = t!(a.accept()); - let _ = rx.recv(); + let (stream, _) = t!(listener.accept()); + stream }); - let s = t!(TcpStream::connect(&addr)); - let s2 = t!(s.try_clone()); - let (tx, rx) = channel(); + let mut stream = t!(TcpStream::connect(&addr)); + let stream2 = t!(stream.try_clone()); + let _t = thread::spawn(move || { - let mut s2 = s2; - assert_eq!(t!(s2.read(&mut [0])), 0); - tx.send(()).unwrap(); + let stream2 = stream2; + + // to make it more likely that `read` happens before `shutdown` + thread::sleep(Duration::from_millis(1000)); + + // this should wake up the reader up + t!(stream2.shutdown(Shutdown::Read)); }); - // this should wake up the child thread - t!(s.shutdown(Shutdown::Read)); - // this test will never finish if the child doesn't wake up - rx.recv().unwrap(); - drop(tx1); + // this `read` should get interrupted by `shutdown` + assert_eq!(t!(stream.read(&mut [0])), 0); }) } |
