On Fri, Sep 16, 2011 at 01:54:47PM +0800, ajia@xxxxxxxxxx wrote: > From: Alex Jia <ajia@xxxxxxxxxx> > > * conf/domain_conf.c: allocate memory to def->redirdevs in > virDomainDefParseXML such as VIR_ALLOC_N(def->redirdevs, n), > however, virDomainDefFree(def) hasn't released these memory. > > * Detected in valgrind run: > > ==19820== 209 (16 direct, 193 indirect) bytes in 1 blocks are definitely lost in loss record 25 of 26 > ==19820== at 0x4A04A28: calloc (vg_replace_malloc.c:467) > ==19820== by 0x4A13AF: virAllocN (memory.c:129) > ==19820== by 0x4D4A0E: virDomainDefParseXML (domain_conf.c:7258) > ==19820== by 0x4D4C93: virDomainDefParseNode (domain_conf.c:7512) > ==19820== by 0x4D562F: virDomainDefParse (domain_conf.c:7465) > ==19820== by 0x415863: testCompareXMLToXMLFiles (qemuxml2xmltest.c:35) > ==19820== by 0x415982: testCompareXMLToXMLHelper (qemuxml2xmltest.c:80) > ==19820== by 0x416D31: virtTestRun (testutils.c:140) > ==19820== by 0x415604: mymain (qemuxml2xmltest.c:192) > ==19820== by 0x416437: virtTestMain (testutils.c:689) > ==19820== by 0x3CA7A1ECDC: (below main) (in /lib64/libc-2.12.so) > ==19820== > ==19820== LEAK SUMMARY: > ==19820== definitely lost: 16 bytes in 1 blocks > ==19820== indirectly lost: 193 bytes in 5 blocks > ==19820== possibly lost: 0 bytes in 0 blocks > ==19820== still reachable: 1,054 bytes in 21 blocks > > * How to reproduce? > % valgrind -v --leak-check=full ./tests/qemuxml2xmltest > > > Signed-off-by: Alex Jia <ajia@xxxxxxxxxx> > --- > src/conf/domain_conf.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index ea6b581..03ab447 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -1206,6 +1206,10 @@ void virDomainDefFree(virDomainDefPtr def) > virDomainHubDefFree(def->hubs[i]); > VIR_FREE(def->hubs); > > + for (i = 0 ; i < def->nredirdevs ; i++) > + virDomainRedirdevDefFree(def->redirdevs[i]); > + VIR_FREE(def->redirdevs); > + > VIR_FREE(def->os.type); > VIR_FREE(def->os.arch); > VIR_FREE(def->os.machine); ACK, reproduced, confirmed, and patch is teh right thing to do, thanks, applied ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list