diff options
Diffstat (limited to 'tools/run-test-valgrind.sh')
-rwxr-xr-x | tools/run-test-valgrind.sh | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/tools/run-test-valgrind.sh b/tools/run-test-valgrind.sh index 200a27d13..ff5bc44ce 100755 --- a/tools/run-test-valgrind.sh +++ b/tools/run-test-valgrind.sh @@ -3,18 +3,17 @@ LIBTOOL="$1"; shift VALGRIND="$1"; shift SUPPRESSIONS="$1"; shift +VALGRIND_ERROR=37 if [ "$1" = "--launch-dbus" ]; then - # Spawn DBus if there's none - if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then - eval `dbus-launch --sh-syntax` - trap "kill $DBUS_SESSION_BUS_PID" EXIT - fi + # Spawn DBus + eval `dbus-launch --sh-syntax` + trap "kill $DBUS_SESSION_BUS_PID" EXIT shift fi -TEST="$1"; shift +TEST="$1" if [ "$NMTST_NO_VALGRIND" != "" ]; then - "$TEST" + "$@" exit $? fi @@ -24,21 +23,48 @@ 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" \ + --num-callers=100 \ --log-file="$LOGFILE" \ - "$TEST" + "$@" 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 "Don't forget to check the valgrind log at '`realpath $LOGFILE`'." >&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 + +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 |