On 8/29/19 12:50 PM, Victor Toso wrote: > On Wed, Aug 28, 2019 at 06:18:02PM -0300, Eduardo Lima (Etrunko) wrote: >> Error caught by valgrind, the OvirtCollection object created in function >> ovirt_foreign_menu_fetch_vm_async() was never freed. >> >> 433 (40 direct, 393 indirect) bytes in 1 blocks are definitely lost in loss record 16,708 of 17,677 >> at 0x5868FDF: g_type_create_instance (in /usr/lib64/libgobject-2.0.so.0.6000.6) >> by 0x584B42C: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6) >> by 0x584D347: g_object_new_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6) >> by 0x584D69C: g_object_new (in /usr/lib64/libgobject-2.0.so.0.6000.6) >> by 0x558E823: ovirt_collection_new (ovirt-collection.c:304) >> by 0x558E98C: ovirt_sub_collection_new_from_resource_search (ovirt-collection.c:375) > > I guess > ovirt_api_search_vms() > > Does this happen too on code not compiled with > HAVE_OVIRT_API_SEARCH_VMS, otherwise you might need to ref after > ovirt_api_get_vms() The ovirt_api_get_vms() and ovirt_api_search_vms() functions are compatible, returning an empty OvirtCollection object, which is only populated by the ovirt_collection_fetch_async() call. So, indeed the same leak happens with both calls, because the OvirtCollection that is created in one function should be freed on the callback, as there is no where else holding the reference to it. Regards, Eduardo. > >> by 0x42D510: ovirt_foreign_menu_fetch_vm_async (ovirt-foreign-menu.c:994) >> by 0x42D510: ovirt_foreign_menu_next_async_step (ovirt-foreign-menu.c:316) >> by 0x42D70D: api_fetched_cb (ovirt-foreign-menu.c:1025) >> by 0x570BC19: ??? (in /usr/lib64/libgio-2.0.so.0.6000.6) >> by 0x570C7EC: ??? (in /usr/lib64/libgio-2.0.so.0.6000.6) >> by 0x559005D: call_async_cb (ovirt-proxy.c:279) >> by 0x55B5A07: ??? (in /usr/lib64/librest-0.7.so.0.0.0) >> >> Signed-off-by: Eduardo Lima (Etrunko) <etrunko@xxxxxxxxxx> >> --- >> src/ovirt-foreign-menu.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c >> index 190bb3b..98ab7b9 100644 >> --- a/src/ovirt-foreign-menu.c >> +++ b/src/ovirt-foreign-menu.c >> @@ -888,7 +888,7 @@ static void vms_fetched_cb(GObject *source_object, >> g_debug("failed to fetch VM list: %s", error->message); >> g_task_return_error(task, error); >> g_object_unref(task); >> - return; >> + goto end; >> } >> >> g_hash_table_iter_init(&iter, ovirt_collection_get_resources(collection)); >> @@ -911,6 +911,9 @@ static void vms_fetched_cb(GObject *source_object, >> "Could not find a VM with guid \"%s\"", menu->priv->vm_guid); >> g_object_unref(task); >> } >> + >> +end: >> + g_object_unref(collection); >> } >> >> >> -- >> 2.21.0 >> >> _______________________________________________ >> virt-tools-list mailing list >> virt-tools-list@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/virt-tools-list -- Eduardo de Barros Lima (Etrunko) Software Engineer - Red Hat etrunko@xxxxxxxxxx _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list