Hi all,

It seems that, there is a memory leak bug in 
libvirt_virConnectDomainEventJobCompletedCallback()
function of libvirt-override.c.

We didn't decrease the reference of 'pyobj_dict' in this function or any other 
places
while pyt0bj_ret is not zero.

libvirt_virConnectDomainEventJobCompletedCallback()
{
  ... ...

  pyobj_ret = PyObject_CallMethod(pyobj_conn,
                                    
(char*)"_dispatchDomainEventJobCompletedCallback",
                                    (char*)"OOO",
                                    pyobj_dom, pyobj_dict, pyobj_cbData);

    Py_DECREF(pyobj_cbData);
    Py_DECREF(pyobj_dom);

 cleanup:
    if (!pyobj_ret) {
        DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret);
        PyErr_Print();
        Py_XDECREF(pyobj_dict);
    } else {
        Py_DECREF(pyobj_ret);
        ret = 0;
    }

    LIBVIRT_RELEASE_THREAD_STATE;
    return ret;
}

I don't think the reference of pyobj_dict will be stolen by PyObject_CallMethod
when it is passed to the Python function 
_dispatchDomainEventJobCompletedCallback.

In fact, we have a test which triggered lots of events and found that the memory
of the test process will keep raising slowly and could not be reclaimed
even we called gc.collect() explicitly in our codes.

So, is it a bug ? Any comments ?

Thanks,
hailiang


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to