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