summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Fitzgerald <fitzgen@gmail.com>2017-07-17 12:54:51 -0700
committerNick Fitzgerald <fitzgen@gmail.com>2017-07-18 09:51:07 -0700
commit02da6536e25a0c45dd8ee77ee37d7993721666e8 (patch)
tree239e3f2af782775de3a06378fe47bf9d4b4c7e0b
parent159fe962b2e389dc834bb7e51c66a14cb905015c (diff)
Drain the child processes stdout before waiting
For very large logs to stdout, this prevents deadlocks.
-rw-r--r--src/lib.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib.rs b/src/lib.rs
index f1f2fcb1..700ca7e9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -881,10 +881,6 @@ impl Builder {
}
let mut child = cmd.spawn()?;
- if !child.wait()?.success() {
- return Err(io::Error::new(io::ErrorKind::Other,
- "clang exited with non-zero status"));
- }
let mut preprocessed = child.stdout.take().unwrap();
let mut file = File::create(if is_cpp {
@@ -893,7 +889,13 @@ impl Builder {
"__bindgen.i"
})?;
io::copy(&mut preprocessed, &mut file)?;
- Ok(())
+
+ if child.wait()?.success() {
+ Ok(())
+ } else {
+ Err(io::Error::new(io::ErrorKind::Other,
+ "clang exited with non-zero status"))
+ }
}
}