On Mon, Jul 30, 2007 at 10:14:25PM +0100, Daniel P. Berrange wrote: > I ran 'make valgrind' for the first time in too long and found a hanful of > memory leaks in code exercised by the test suite. The attached patch fixes > them all.
BTW, someone might have the answer for a question about valgrind. No matter what args I try, it consistently exits with a status code of '0' even if there are memory leaks $ valgrind --leak-check=full --error-exitcode=1 ./qemuxml2xmltest ==14631== Memcheck, a memory error detector. ==14631== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al. ==14631== Using LibVEX rev 1658, a library for dynamic binary translation. ==14631== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP. ==14631== Using valgrind-3.2.1, a dynamic binary instrumentation framework. ==14631== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al. ==14631== For more details, rerun with: -v ==14631== QEMU XML-2-ARGV minimal ... OK QEMU XML-2-ARGV Boot CDROM ... OK QEMU XML-2-ARGV Boot Network ... OK QEMU XML-2-ARGV Boot Floppy ... OK QEMU XML-2-ARGV Clock UTC ... OK QEMU XML-2-ARGV Clock Localtime ... OK QEMU XML-2-ARGV Disk CDROM ... OK QEMU XML-2-ARGV Disk Floppy ... OK QEMU XML-2-ARGV Disk Many ... OK QEMU XML-2-ARGV Graphics VNC ... OK QEMU XML-2-ARGV Graphics SDL ... OK QEMU XML-2-ARGV Input USB Mouse ... OK QEMU XML-2-ARGV Input USB Tablet ... OK QEMU XML-2-ARGV Misc ACPI ... OK QEMU XML-2-ARGV Misc No Reboot ... OK QEMU XML-2-ARGV Net User ... OK ==14631== ==14631== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 24 from 1) ==14631== malloc/free: in use at exit: 370,538 bytes in 64 blocks. ==14631== malloc/free: 9,731 allocs, 9,667 frees, 1,236,729 bytes allocated. ==14631== For counts of detected errors, rerun with: -v ==14631== searching for pointers to 64 not-freed blocks. ==14631== checked 314,304 bytes. ==14631== ==14631== 369,984 (265,344 direct, 104,640 indirect) bytes in 16 blocks are definitely lost in loss record 10 of 10 ==14631== at 0x400473F: calloc (vg_replace_malloc.c:279) ==14631== by 0x80657C3: qemudParseVMDef (qemu_conf.c:912) ==14631== by 0x804CF51: testCompareXMLToXMLHelper (qemuxml2xmltest.c:28) ==14631== by 0x804D990: virtTestRun (testutils.c:69) ==14631== by 0x804C975: main (qemuxml2xmltest.c:78) ==14631== ==14631== LEAK SUMMARY: ==14631== definitely lost: 265,344 bytes in 16 blocks. ==14631== indirectly lost: 104,640 bytes in 28 blocks. ==14631== possibly lost: 0 bytes in 0 blocks. ==14631== still reachable: 554 bytes in 20 blocks. ==14631== suppressed: 0 bytes in 0 blocks. ==14631== Reachable blocks (those to which a pointer was found) are not shown. ==14631== To see them, rerun with: --show-reachable=yes $ echo $? 0 Notice how there are 16 chunks of memory which are definitely lost, but it still reports 0 errors in its 'ERROR SUMMARY' section, and exits as if it were successful. Any one know how to make 'do the right thing' if it finds leaks & return a non-zero status ? Makes it very hard to put into the makefile for automated error detection[1]. Dan. [1] I really don't want to parse its 'LEAK SUMMARY" output. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=| -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list