Skip to content

Commit 0e74b2a

Browse files
committed
Auto merge of #4857 - alexcrichton:better-test-fail, r=alexcrichton
Make the `failed_submodule_checkout` test more robust Hopefully should help diagnose deadlocks in rust-lang/rust
2 parents 83912a0 + dfda6f3 commit 0e74b2a

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

tests/git.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ extern crate hamcrest;
55

66
use std::fs::{self, File};
77
use std::io::prelude::*;
8-
use std::net::TcpListener;
8+
use std::net::{TcpListener, TcpStream};
99
use std::path::Path;
10+
use std::sync::Arc;
11+
use std::sync::atomic::{AtomicBool, Ordering};
1012
use std::thread;
1113

1214
use cargo::util::process;
@@ -2198,12 +2200,13 @@ fn failed_submodule_checkout() {
21982200

21992201
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
22002202
let addr = listener.local_addr().unwrap();
2203+
let done = Arc::new(AtomicBool::new(false));
2204+
let done2 = done.clone();
22012205

22022206
let t = thread::spawn(move || {
2203-
let a = listener.accept().unwrap();
2204-
drop(a);
2205-
let a = listener.accept().unwrap();
2206-
drop(a);
2207+
while !done2.load(Ordering::SeqCst) {
2208+
drop(listener.accept());
2209+
}
22072210
});
22082211

22092212
let repo = git2::Repository::open(&git_project2.root()).unwrap();
@@ -2248,5 +2251,7 @@ fn failed_submodule_checkout() {
22482251
.with_stderr_contains(" failed to update submodule `src`")
22492252
.with_stderr_contains(" failed to update submodule `bar`"));
22502253

2254+
done.store(true, Ordering::SeqCst);
2255+
drop(TcpStream::connect(&addr));
22512256
t.join().unwrap();
22522257
}

0 commit comments

Comments
 (0)