Merge branch 'js/trace2-avoid-recursive-errors'
trace2 error code path fix. * js/trace2-avoid-recursive-errors: trace2: disable tr2_dst before warning on write errors
This commit is contained in:
commit
9b0a970ace
@ -1,4 +1,5 @@
|
||||
#include "cache.h"
|
||||
#include "sigchain.h"
|
||||
#include "trace2/tr2_dst.h"
|
||||
#include "trace2/tr2_sid.h"
|
||||
#include "trace2/tr2_sysenv.h"
|
||||
@ -360,6 +361,7 @@ int tr2_dst_trace_want(struct tr2_dst *dst)
|
||||
void tr2_dst_write_line(struct tr2_dst *dst, struct strbuf *buf_line)
|
||||
{
|
||||
int fd = tr2_dst_get_trace_fd(dst);
|
||||
ssize_t bytes;
|
||||
|
||||
strbuf_complete_line(buf_line); /* ensure final NL on buffer */
|
||||
|
||||
@ -378,12 +380,15 @@ void tr2_dst_write_line(struct tr2_dst *dst, struct strbuf *buf_line)
|
||||
*
|
||||
* If we get an IO error, just close the trace dst.
|
||||
*/
|
||||
if (write(fd, buf_line->buf, buf_line->len) >= 0)
|
||||
sigchain_push(SIGPIPE, SIG_IGN);
|
||||
bytes = write(fd, buf_line->buf, buf_line->len);
|
||||
sigchain_pop(SIGPIPE);
|
||||
if (bytes >= 0)
|
||||
return;
|
||||
|
||||
tr2_dst_trace_disable(dst);
|
||||
if (tr2_dst_want_warning())
|
||||
warning("unable to write trace to '%s': %s",
|
||||
tr2_sysenv_display_name(dst->sysenv_var),
|
||||
strerror(errno));
|
||||
tr2_dst_trace_disable(dst);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user