[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH] qemu-iotests: fix -valgrind option for check
From: |
Max Reitz |
Subject: |
Re: [Qemu-block] [PATCH] qemu-iotests: fix -valgrind option for check |
Date: |
Fri, 30 Oct 2015 19:09:42 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 30.10.2015 19:04, Jeff Cody wrote:
> On Fri, Oct 30, 2015 at 06:16:29PM +0100, Max Reitz wrote:
>> On 29.10.2015 19:04, Jeff Cody wrote:
>>> Commit 934659c switched the iotests to run qemu-io from a bash subshell,
>>> in order to catch segfaults. This method is incompatible with the
>>> current valgrind_qemu_io() bash function.
>>>
>>> Move the valgrind usage into the exec subshell in _qemu_io_wrapper(),
>>> while making sure the original return value is passed back to the
>>> caller.
>>>
>>> Update test output for tests 039, 061, and 137 as it looks for the
>>> specific subshell command when the process is terminated.
>>>
>>> Reported-by: Kevin Wolf <address@hidden>
>>> Signed-off-by: Jeff Cody <address@hidden>
>>> ---
>>> tests/qemu-iotests/039.out | 30 +++++++++++++++++++++++++-----
>>> tests/qemu-iotests/061.out | 12 ++++++++++--
>>> tests/qemu-iotests/137.out | 6 +++++-
>>> tests/qemu-iotests/common | 9 ++-------
>>> tests/qemu-iotests/common.config | 18 +++++++++++++++++-
>>> tests/qemu-iotests/common.rc | 10 ----------
>>> 6 files changed, 59 insertions(+), 26 deletions(-)
>>>
[...]
>>> diff --git a/tests/qemu-iotests/common.config
>>> b/tests/qemu-iotests/common.config
>>> index 4d8665f..db9702b 100644
>>> --- a/tests/qemu-iotests/common.config
>>> +++ b/tests/qemu-iotests/common.config
>>> @@ -122,7 +122,23 @@ _qemu_img_wrapper()
>>>
>>> _qemu_io_wrapper()
>>> {
>>> - (exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@")
>>> + local VALGRIND_LOGFILE=/tmp/$$.valgrind
>>> + local RETVAL
>>> + (
>>> + if [ "${VALGRIND_QEMU}" == "y" ]; then
>>> + exec valgrind --log-file="${VALGRIND_LOGFILE}"
>>> --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@"
>>> + else
>>> + exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@"
>>> + fi
>>> + )
>>> + RETVAL=$?
>>
>> Er, well, this is nice... When just invoking $QEMU_IO -c 'sigraise 9', I
>> get the appropriate error message. ("$PID Killed [...]"). But the
>> instant an image is opened, it just disappears. Yes, using -c open makes
>> it disappear, too.
>>
>> Since all of our qemu-io invocations do use image files (that's its
>> purpose after all), that means that all of them seem to exit just fine
>> when running under valgrind. That is... strange.
>>
>> Is it just me? Maybe I have a broken valgrind, I don't know (3.11.0 here).
>>
>
> I have valgrind-3.9.0 here, and I get the same behavior... it is not
> just you. There are also some tests where valgrind itself segfaults.
>
> I was going to suggest using kill -l TERM instead of kill -l KILL.
> However, I just tried that with test 137, and it causes valgrind to
> segfault. :(
Hm, well, then I guess we can just ignore this and declare it broken. If
someone complains, it'll be his/her job to fix it. ;-)
>>> + if [ "${VALGRIND_QEMU}" == "y" ]; then
>>> + if [ $RETVAL != 0 ]; then
>>> + cat "${VALGRIND_LOGFILE}"
>>
>> If I got the error message and RETVAL would be correctly set to 137,
>> this would print the log file. I'm not sure whether that's what we
>> want...? If valgrind exits with any error code but 99, the log file will
>> probably not contain anything interesting.
>>
>> But if the qemu-io process was killed on purpose, this breaks the test,
>> which I don't think is necessary.
>>
>
> Good point... How about just:
>
> if [ $RETVAL == 99 ]; then
> cat "${VALGRIND_LOGFILE}"
> fi
Yes, that's what I had in mind.
Max
>>> + fi
>>> + rm -f "${VALGRIND_LOGFILE}"
>>> + fi
>>> + (exit $RETVAL)
>>> }
>>>
>>> _qemu_nbd_wrapper()
>>> diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
>>> index 4878e99..d9913f8 100644
>>> --- a/tests/qemu-iotests/common.rc
>>> +++ b/tests/qemu-iotests/common.rc
>>> @@ -70,16 +70,6 @@ else
>>> TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT
>>> fi
>>>
>>> -function valgrind_qemu_io()
>>> -{
>>> - valgrind --log-file=/tmp/$$.valgrind --error-exitcode=99 $REAL_QEMU_IO
>>> "$@"
>>> - if [ $? != 0 ]; then
>>> - cat /tmp/$$.valgrind
>>> - fi
>>> - rm -f /tmp/$$.valgrind
>>> -}
>>> -
>>> -
>>> _optstr_add()
>>> {
>>> if [ -n "$1" ]; then
>>>
>>
>>
>
>
signature.asc
Description: OpenPGP digital signature