]> git.ipfire.org Git - thirdparty/git.git/commit
trace2: disable tr2_dst before warning on write errors
authorJosh Steadmon <steadmon@google.com>
Thu, 18 Nov 2021 22:01:41 +0000 (14:01 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Nov 2021 06:38:15 +0000 (22:38 -0800)
commit538ac746048fab0ed32b972e34eaabb9fb3f15b9
tree6f179087022b1e51fa3d140510a4c7809948eea6
parent5fbd2fc5997dfa4d4593a862fe729b1e7a89bcf8
trace2: disable tr2_dst before warning on write errors

If writing a trace2 message fails, we optionally warn the user of this
fact. However, in 0ee10fd (usage: add trace2 entry upon warning(),
2020-11-23), we added a trace entry to the warning() function. This
means that we can enter an infinite loop of failing trace2 writes and
warnings. Fix this by disabling the failing trace2 destination before
issuing the warning.

Additionally, trace2 sets a default SIGPIPE handler
(tr2main_signal_handler) when it is initialized. This handler generates
its own trace2 messages when a signal is received. If a trace2 write
fails due to a broken pipe, this handler will run and then cause another
failed write. Fix this by temporarily ignoring SIGPIPE while writing
trace2 messages. This is safe because the write will still fail, and we
will disable the failing destination.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
trace2/tr2_dst.c