summaryrefslogtreecommitdiff
path: root/tools/run-test-valgrind.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/run-test-valgrind.sh')
-rwxr-xr-xtools/run-test-valgrind.sh54
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