diff options
author | 2015-09-15 18:24:11 -0700 | |
---|---|---|
committer | 2015-12-10 01:02:57 -0800 | |
commit | f17a71de746360822104b6cfeac1fbcad2c8f294 (patch) | |
tree | 7d60c09e980c491e864a4d420b35a38c13e4364c /src | |
parent | 0212314479b12b49b7149db0aa17330e94d7c4e4 (diff) |
Don't complain if do_builtin_io fails due to EPIPE
If stdio is dead due to EPIPE, there's no great reason to spew a stack dump.
This will still write an error to stderr if stdout dies. This might be
undesirable, but changing that should be considered separately.
Diffstat (limited to 'src')
-rw-r--r-- | src/exec.cpp | 2 | ||||
-rw-r--r-- | src/postfork.cpp | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/exec.cpp b/src/exec.cpp index 63186ef7..bd9f9fb5 100644 --- a/src/exec.cpp +++ b/src/exec.cpp @@ -1181,7 +1181,7 @@ void exec_job(parser_t &parser, job_t *j) const std::string outbuff = wcs2string(stdout_buffer); const std::string errbuff = wcs2string(stderr_buffer); bool builtin_io_done = do_builtin_io(outbuff.data(), outbuff.size(), errbuff.data(), errbuff.size()); - if (! builtin_io_done) + if (! builtin_io_done && errno != EPIPE) { show_stackframe(); } diff --git a/src/postfork.cpp b/src/postfork.cpp index 1eb958ad..29cf850c 100644 --- a/src/postfork.cpp +++ b/src/postfork.cpp @@ -569,12 +569,13 @@ bool do_builtin_io(const char *out, size_t outlen, const char *err, size_t errle bool success = true; if (out && outlen) { - if (write_loop(STDOUT_FILENO, out, outlen) < 0) { + int e = errno; debug_safe(0, "Error while writing to stdout"); safe_perror("write_loop"); success = false; + errno = e; } } |