On 01/18/2017 08:51 AM, Hailiang Zhang wrote: > 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 ? Yes. we need to decrement the reference counter. Wanna propose the patch and have the first contribution to libvirt-python? :-) Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list