From: Darren Tucker Date: Wed, 19 Jan 2022 04:37:39 +0000 (+1100) Subject: Invoke EXIT handler early when using Valgrind. X-Git-Tag: V_8_9_P1~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20da6ed136dd76e6a0b229ca3036ef9c7c7ef798;p=thirdparty%2Fopenssh-portable.git 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. --- diff --git a/regress/test-exec.sh b/regress/test-exec.sh index 361a06531..7aeead5c9 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -718,6 +718,19 @@ start_sshd () cleanup 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; sleep 1 VG_RESULTS=$(find $OBJ/valgrind-out -type f -print)