From afb885300f957bdfe33387afeced40507a535b4f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 4 Jun 2015 17:24:08 +0200 Subject: [PATCH] valgrind: rework run-test-valgrind.sh script not to print unrelated message If the valgrind logfile is empty, don't log an error message with the location of the logfile. Also, if the test didn't fail due to memleaks, log a different message. (cherry picked from commit 2a5d17eb5f9fbb5ae78e6310822b12852afa2c2a) --- tools/run-test-valgrind.sh | 46 ++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/tools/run-test-valgrind.sh b/tools/run-test-valgrind.sh index cd53306b4c..ff5bc44ce3 100755 --- a/tools/run-test-valgrind.sh +++ b/tools/run-test-valgrind.sh @@ -3,6 +3,7 @@ LIBTOOL="$1"; shift VALGRIND="$1"; shift SUPPRESSIONS="$1"; shift +VALGRIND_ERROR=37 if [ "$1" = "--launch-dbus" ]; then # Spawn DBus eval `dbus-launch --sh-syntax` @@ -22,7 +23,7 @@ export G_SLICE=always-malloc export G_DEBUG=gc-friendly $LIBTOOL --mode=execute "$VALGRIND" \ --quiet \ - --error-exitcode=1 \ + --error-exitcode=$VALGRIND_ERROR \ --leak-check=full \ --gen-suppressions=all \ --suppressions="$SUPPRESSIONS" \ @@ -31,28 +32,39 @@ $LIBTOOL --mode=execute "$VALGRIND" \ "$@" RESULT=$? -if [ $RESULT -eq 0 -a "$(wc -c "$LOGFILE" | awk '{print$1}')" -ne 0 ]; then - echo "valgrind succeeded, but log is not empty: $LOGFILE" - exit 1 -fi +test -s "$LOGFILE" +HAS_ERRORS=$? if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then - echo "valgrind failed! Check the log at '`realpath $LOGFILE`'." >&2 - UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq) - if [ -n "$UNRESOLVED" ]; then - echo Some addresses could not be resolved into symbols. >&2 - echo The errors might get suppressed when you install the debuging symbols. >&2 - if [ -x /usr/bin/dnf ]; then - echo Hint: dnf debuginfo-install $UNRESOLVED >&2 - elif [ -x /usr/bin/debuginfo-install ]; then - echo Hint: debuginfo-install $UNRESOLVED >&2 - else - echo Files without debugging symbols: $UNRESOLVED >&2 + if [ $HAS_ERRORS -ne 0 ]; then + rm -f "$LOGFILE" + elif [ $RESULT -ne $VALGRIND_ERROR ]; then + # the test (probably) didn't fail due to valgrind. + echo "The test failed. Also check the valgrind log at '`realpath "$LOGFILE"`'" >&2 + else + echo "valgrind failed! Check the log at '`realpath "$LOGFILE"`'" >&2 + UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq) + if [ -n "$UNRESOLVED" ]; then + echo Some addresses could not be resolved into symbols. >&2 + echo The errors might get suppressed when you install the debuging symbols. >&2 + if [ -x /usr/bin/dnf ]; then + echo Hint: dnf debuginfo-install $UNRESOLVED >&2 + elif [ -x /usr/bin/debuginfo-install ]; then + echo Hint: debuginfo-install $UNRESOLVED >&2 + else + echo Files without debugging symbols: $UNRESOLVED >&2 + fi fi fi exit $RESULT fi -find -name "$LOGFILE" -size 0 -delete +if [ $HAS_ERRORS -eq 0 ]; then + # shouldn't actually happen... + echo "valgrind succeeded, but log is not empty: '`realpath "$LOGFILE"`'" >&2 + exit 1 +fi + +rm -f "$LOGFILE" exit $RESULT