1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 16:06:10 +02:00

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:
Junio C Hamano 2021-12-10 14:35:08 -08:00
commit 9b0a970ace

View File

@ -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);
}