From: Ján Tomko Date: Thu, 14 Nov 2013 15:29:29 +0000 (+0100) Subject: Properly unref a connection with a close callback X-Git-Tag: v1.2.0-rc1~69 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e68432e45fcfbd3fd65532d0213f0a3b57925fae;p=thirdparty%2Flibvirt.git Properly unref a connection with a close callback The connection pointer in the closeCallback data was never initialized, making the unref in remoteClientCloseFunc a no-op. This fixes the following leak in virsh when the daemon closes the connection unexpectedly: 1,179 (288 direct, 891 indirect) bytes in 1 blocks are definitely lost in loss record 745 of 792 at 0x4C2A6D0: calloc (in vgpreload_memcheck-amd64-linux.so) by 0x4E9643D: virAllocVar (viralloc.c:558) by 0x4ED2425: virObjectNew (virobject.c:190) by 0x4F675AC: virGetConnect (datatypes.c:116) by 0x4F6EA06: do_open (libvirt.c:1136) by 0x4F71017: virConnectOpenAuth (libvirt.c:1481) by 0x129FFA: vshReconnect (virsh.c:337) by 0x128310: main (virsh.c:2470) --- diff --git a/src/libvirt.c b/src/libvirt.c index 6a17db8d36..ae0530048d 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -21455,6 +21455,7 @@ int virConnectRegisterCloseCallback(virConnectPtr conn, goto error; } + conn->closeCallback->conn = conn; conn->closeCallback->callback = cb; conn->closeCallback->opaque = opaque; conn->closeCallback->freeCallback = freecb;