Skip to content

Commit 32f8366

Browse files
committed
Auto merge of #33640 - lucab:to-upstream/tcp-stress, r=alexcrichton
test: explicitely check the number of spawned threads in tcp-stress System limits may restrict the number of threads effectively spawned by this test (eg. systemd recently introduced a 512 tasks per unit maximum default). Now this test explicitly asserts on the expected number of threads, making failures due to system limits easier to spot. More details at https://bugs.debian.org/822325
2 parents e87cd7e + 22972b8 commit 32f8366

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/test/run-pass/tcp-stress.rs

+15-9
Original file line numberDiff line numberDiff line change
@@ -18,48 +18,54 @@ use std::io::prelude::*;
1818
use std::net::{TcpListener, TcpStream};
1919
use std::process;
2020
use std::sync::mpsc::channel;
21+
use std::time::Duration;
2122
use std::thread::{self, Builder};
2223

2324
fn main() {
2425
// This test has a chance to time out, try to not let it time out
2526
thread::spawn(move|| -> () {
26-
thread::sleep_ms(30 * 1000);
27+
thread::sleep(Duration::from_secs(30));
2728
process::exit(1);
2829
});
2930

30-
let mut listener = TcpListener::bind("127.0.0.1:0").unwrap();
31+
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
3132
let addr = listener.local_addr().unwrap();
3233
thread::spawn(move || -> () {
3334
loop {
3435
let mut stream = match listener.accept() {
3536
Ok(stream) => stream.0,
36-
Err(error) => continue,
37+
Err(_) => continue,
3738
};
38-
stream.read(&mut [0]);
39-
stream.write(&[2]);
39+
let _ = stream.read(&mut [0]);
40+
let _ = stream.write(&[2]);
4041
}
4142
});
4243

4344
let (tx, rx) = channel();
45+
let mut spawned_cnt = 0;
4446
for _ in 0..1000 {
4547
let tx = tx.clone();
46-
Builder::new().stack_size(64 * 1024).spawn(move|| {
48+
let res = Builder::new().stack_size(64 * 1024).spawn(move|| {
4749
match TcpStream::connect(addr) {
4850
Ok(mut stream) => {
49-
stream.write(&[1]);
50-
stream.read(&mut [0]);
51+
let _ = stream.write(&[1]);
52+
let _ = stream.read(&mut [0]);
5153
},
5254
Err(..) => {}
5355
}
5456
tx.send(()).unwrap();
5557
});
58+
if let Ok(_) = res {
59+
spawned_cnt += 1;
60+
};
5661
}
5762

5863
// Wait for all clients to exit, but don't wait for the server to exit. The
5964
// server just runs infinitely.
6065
drop(tx);
61-
for _ in 0..1000 {
66+
for _ in 0..spawned_cnt {
6267
rx.recv().unwrap();
6368
}
69+
assert_eq!(spawned_cnt, 1000);
6470
process::exit(0);
6571
}

0 commit comments

Comments
 (0)