[libvirt] [libvirt-glib] a leak in libvirt-glib

Marc-André Lureau marcandre.lureau at gmail.com
Mon Feb 27 16:25:58 UTC 2012


Hi,

In libvirt-glib, we call virStreamEventAddCallback() and give it a
ref, that is supposed to be unref when the stream event is removed. But
this doesn't happen! I tracked it down to:

static void remoteStreamCallbackFree(void *opaque)
{
    struct remoteStreamCallbackData *cbdata = opaque;

    if (!cbdata->cb && cbdata->ff)
        (cbdata->ff)(cbdata->opaque);

Why are we checking for cbdata->cb here? That gives us a leak
when taking screenshots. So far I solved it
with the attached patch for libvirt-glib. I noticed it because that
of a resulting process & fd leakage in the libvirtd side.

It might be that the fix should be in libvirt, but anyway, the proposed
patch doesn't need a libvirt depedency update and also keeps the
object reference manangement at the libvirt-glib level, which is nice.


-- 
Marc-André Lureau
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Don-t-leak-GVirStream.patch
Type: text/x-patch
Size: 3452 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120227/cbbf487b/attachment-0001.bin>


More information about the libvir-list mailing list