From f7fee15ae848071f183da8d5c264974cc225d413 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 13 Dec 2013 17:07:52 +0100 Subject: [PATCH] event-test: Unregister close callback When registering a close callback, the connection refcount is increased as the connection object is passed to the callback and hence we must prevent deleting it too soon. However, when closing the connection, the connection object is just unrefed. So whenever a connection with a close callback is closed, we end up with the connection object which has exactly one reference. Leaving the code as-is doesn't mean the end of the world as we know it, but why give a bad example? ==14531== 288 bytes in 1 blocks are still reachable in loss record 695 of 762 ==14531== at 0x4C2BDE4: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==14531== by 0x4E9FE09: virAllocVar (viralloc.c:558) ==14531== by 0x4EDBE45: virObjectNew (virobject.c:190) ==14531== by 0x4F71AAC: virGetConnect (datatypes.c:116) ==14531== by 0x4F78511: do_open (libvirt.c:1136) ==14531== by 0x4F7B3AC: virConnectOpenAuth (libvirt.c:1481) ==14531== by 0x4011D2: main (event-test.c:499) (and other leaks tied to virGetConnect()) Signed-off-by: Michal Privoznik --- examples/object-events/event-test.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/object-events/event-test.c b/examples/object-events/event-test.c index f872b9ff65..228a091bf8 100644 --- a/examples/object-events/event-test.c +++ b/examples/object-events/event-test.c @@ -675,6 +675,8 @@ int main(int argc, char **argv) virConnectDomainEventDeregisterAny(dconn, callback8ret); } + virConnectUnregisterCloseCallback(dconn, connectClose); + VIR_DEBUG("Closing connection"); if (dconn && virConnectClose(dconn) < 0) { printf("error closing\n"); -- GitLab