Is t7006-pager.sh racy?
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 24, 2021, 00:04 UTC
- Message-ID
- <xmqq1r4b8ezp.fsf@gitster.g>
It seems under --stress it is fairly easy to break the said test, especially the one near the end
test_expect_success TTY 'git returns SIGPIPE on propagated signals from pager' '
test_when_finished "rm pager-used trace.normal" &&
test_config core.pager ">pager-used; test-tool sigchain" &&
GIT_TRACE2="$(pwd)/trace.normal" &&
export GIT_TRACE2 &&
test_when_finished "unset GIT_TRACE2" && if test_have_prereq !MINGW
then
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
test_match_signal 13 "$OUT"
else
test_terminal git log
fi && grep child_exit trace.normal >child-exits &&
test_line_count = 1 child-exits &&
grep " code:143 " child-exits &&
test_path_is_file pager-used
'When it fails the code in child-exits is actually -1 not 143, a propagated pipe.
What makes us expect that the "git log" invocation should trigger a SIGPIPE in the first place? test-sigchain emitting a few lines and exiting without ever reading from its standard input? Will it reliably die soon enough before, or linger around until, we attempt to write to the pager? If it does not die quickly enough, can we attempt to write, successfully fill the buffer between us and the pager, and wait to notice that test-sigchain exiting with non-zero, or something?