With the '-valgrind' option, let all the QEMU processes be run under
the Valgrind tool. The Valgrind own parameters may be set with its
environment variable VALGRIND_OPTS, e.g.
VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 17 deletions(-)
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 93f8738..3caaca4 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -60,19 +60,52 @@ if ! . ./common.config
exit 1
fi
+_qemu_proc_wrapper()
+{
+ local VALGRIND_LOGFILE="$1"
+ shift
+ if [ "${VALGRIND_QEMU}" == "y" ]; then
+ exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$@"
+ else
+ exec "$@"
+ fi
+}
+
+_qemu_proc_valgrind_log()
+{
+ local VALGRIND_LOGFILE="$1"
+ local RETVAL="$2"
+ if [ "${VALGRIND_QEMU}" == "y" ]; then
+ if [ $RETVAL == 99 ]; then
+ cat "${VALGRIND_LOGFILE}"
+ fi
+ rm -f "${VALGRIND_LOGFILE}"
+ fi
+}
+
_qemu_wrapper()
{
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
(
if [ -n "${QEMU_NEED_PID}" ]; then
echo $BASHPID > "${QEMU_TEST_DIR}/qemu-${_QEMU_HANDLE}.pid"
fi
- exec "$QEMU_PROG" $QEMU_OPTIONS "$@"
+ _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_PROG" $QEMU_OPTIONS "$@"
)
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_img_wrapper()
{
- (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@")
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
+ (
+ _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@"
+ )
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_io_wrapper()
@@ -85,38 +118,36 @@ _qemu_io_wrapper()
QEMU_IO_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS"
fi
fi
- local RETVAL
(
- if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
- else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
- fi
+ _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
)
RETVAL=$?
- if [ "${VALGRIND_QEMU}" == "y" ]; then
- if [ $RETVAL == 99 ]; then
- cat "${VALGRIND_LOGFILE}"
- fi
- rm -f "${VALGRIND_LOGFILE}"
- fi
- (exit $RETVAL)
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_nbd_wrapper()
{
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
(
echo $BASHPID > "${QEMU_TEST_DIR}/qemu-nbd.pid"
- exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@"
+ _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@"
)
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_vxhs_wrapper()
{
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
(
echo $BASHPID > "${TEST_DIR}/qemu-vxhs.pid"
- exec "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@"
+ _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@"
)
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
export QEMU=_qemu_wrapper
--
1.8.3.1
On 6/9/19 1:35 PM, Andrey Shinkevich wrote: > With the '-valgrind' option, let all the QEMU processes be run under > the Valgrind tool. The Valgrind own parameters may be set with its > environment variable VALGRIND_OPTS, e.g. > VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> Let's spell this --valgrind; long options should prefer the use of -- (as in getopt_long), whether or not we also have a reason to support -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this regards, but no need to make it worse. > > Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> > --- > tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------ > 1 file changed, 48 insertions(+), 17 deletions(-) > > diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc > index 93f8738..3caaca4 100644 -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
On 10/06/2019 17:24, Eric Blake wrote: > On 6/9/19 1:35 PM, Andrey Shinkevich wrote: >> With the '-valgrind' option, let all the QEMU processes be run under >> the Valgrind tool. The Valgrind own parameters may be set with its >> environment variable VALGRIND_OPTS, e.g. >> VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> > > Let's spell this --valgrind; long options should prefer the use of -- > (as in getopt_long), whether or not we also have a reason to support > -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this > regards, but no need to make it worse. > Thank you, Eric. That sounds good but the short option'-valgrind' is preexisting in QEMU. Should I create a new patch for the long option? If so, will we have both options supported by QEMU? Andrey >> >> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >> --- >> tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------ >> 1 file changed, 48 insertions(+), 17 deletions(-) >> >> diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc >> index 93f8738..3caaca4 100644 > > -- With the best regards, Andrey Shinkevich
On 6/10/19 10:02 AM, Andrey Shinkevich wrote: > > > On 10/06/2019 17:24, Eric Blake wrote: >> On 6/9/19 1:35 PM, Andrey Shinkevich wrote: >>> With the '-valgrind' option, let all the QEMU processes be run under >>> the Valgrind tool. The Valgrind own parameters may be set with its >>> environment variable VALGRIND_OPTS, e.g. >>> VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> >> >> Let's spell this --valgrind; long options should prefer the use of -- >> (as in getopt_long), whether or not we also have a reason to support >> -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this >> regards, but no need to make it worse. >> > > Thank you, Eric. That sounds good but the short option'-valgrind' is > preexisting in QEMU. Should I create a new patch for the long option? > If so, will we have both options supported by QEMU? Oh, you're talking about qemu-iotests/check already supporting merely '-valgrind', not 'qemu-kvm' or '*/qemu-system-*'. ./check is already an oddball for not permitting double dash, but at this point, normalizing it is a lot of churn. So it becomes a tradeoff on how much grunt work do you really want to do. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
© 2016 - 2026 Red Hat, Inc.