diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-16 17:52:15 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-16 17:52:15 +0200 |
commit | e62aef8ebe4b4b7eb733da6822d7759c0427222b (patch) | |
tree | 0a7851a65f622b5f6dae0174d22bdbabb32dfec1 /build/cxx | |
parent | ad99a55b0bb615f20cec9880aeb96ab0779d56d0 (diff) |
Don't fail if we closed our end of pipe early
Diffstat (limited to 'build/cxx')
-rw-r--r-- | build/cxx/compile.cxx | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/build/cxx/compile.cxx b/build/cxx/compile.cxx index 72f8562..2a56fbd 100644 --- a/build/cxx/compile.cxx +++ b/build/cxx/compile.cxx @@ -679,7 +679,17 @@ namespace build // We assume the child process issued some diagnostics. // if (!pr.wait ()) - throw failed (); + { + // In case of a restarts, we closed our end of the pipe early + // which might have caused the other end to fail. So far we + // experienced this on Fedora 23 with GCC 5.3.1 and there were + // no diagnostics issued, just the non-zero exit status. If we + // do get diagnostics, then we will have to read and discard the + // output until eof. + // + if (!restart) + throw failed (); + } } catch (const process_error& e) { |