Invoke EXIT handler early when using Valgrind.

When using Valgrind, we need to wait for all invoked programs to
complete before checking their valgrind logs.  Some tests, notably
agent-restrict, set an EXIT trap handler to clean up things like
ssh-agent, but those do not get invoked until test-exec.sh exits.
This causes the Valgrind wait to deadlock, so if present invoke
the EXIT handler before checking the Valgrind logs.
This commit is contained in:
Darren Tucker 2022-01-19 15:37:39 +11:00
parent ad2e0580c8
commit 20da6ed136
1 changed files with 13 additions and 0 deletions

View File

@ -718,6 +718,19 @@ start_sshd ()
cleanup cleanup
if [ "x$USE_VALGRIND" != "x" ]; then if [ "x$USE_VALGRIND" != "x" ]; then
# If there is an EXIT trap handler, invoke it now.
# Some tests set these to clean up processes such as ssh-agent. We
# need to wait for all valgrind processes to complete so we can check
# their logs, but since the EXIT traps are not invoked until
# test-exec.sh exits, waiting here will deadlock.
# This is not very portable but then neither is valgrind itself.
exithandler=$(trap -p | awk -F "'" '/EXIT$/{print $2}')
if [ "x${exithandler}" != "x" ]; then
verbose invoking EXIT trap handler early: ${exithandler}
${exithandler}
trap '' EXIT
fi
# wait for any running process to complete # wait for any running process to complete
wait; sleep 1 wait; sleep 1
VG_RESULTS=$(find $OBJ/valgrind-out -type f -print) VG_RESULTS=$(find $OBJ/valgrind-out -type f -print)