diff options
author | Nick Fitzgerald <fitzgen@gmail.com> | 2017-07-17 12:54:51 -0700 |
---|---|---|
committer | Nick Fitzgerald <fitzgen@gmail.com> | 2017-07-18 09:51:07 -0700 |
commit | 02da6536e25a0c45dd8ee77ee37d7993721666e8 (patch) | |
tree | 239e3f2af782775de3a06378fe47bf9d4b4c7e0b | |
parent | 159fe962b2e389dc834bb7e51c66a14cb905015c (diff) |
Drain the child processes stdout before waiting
For very large logs to stdout, this prevents deadlocks.
-rw-r--r-- | src/lib.rs | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -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")) + } } } |