[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[virt-tools-list] [PATCH 24/47] Fix reference count handling in device list



When adding an OsinfoEntity to an OsinfoList, an explicit
reference should be taken on the entity, rather than
relying on the caller to have done it.

* osinfo/osinfo_list.c: Take an extra reference when
  adding an entity to the list
* osinfo/osinfo_dataread.c: Release a reference
  after adding an entity to the list
---
 osinfo/osinfo_dataread.c |    3 +++
 osinfo/osinfo_list.c     |    3 ++-
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/osinfo/osinfo_dataread.c b/osinfo/osinfo_dataread.c
index 166c82b..b212852 100644
--- a/osinfo/osinfo_dataread.c
+++ b/osinfo/osinfo_dataread.c
@@ -525,6 +525,7 @@ static int __osinfoProcessOs(OsinfoDb *db,
 
 finished:
     osinfo_list_add(OSINFO_LIST(oses), OSINFO_ENTITY(os));
+    g_object_unref(os);
     return 0;
     /* At end, cursor is at end of os node */
 
@@ -633,6 +634,7 @@ static int __osinfoProcessHypervisor(OsinfoDb *db,
 
 finished:
     osinfo_list_add(OSINFO_LIST(hypervisors), OSINFO_ENTITY(hv));
+    g_object_unref(hv);
     return 0;
     /* At end, cursor is at end of hv node */
 
@@ -725,6 +727,7 @@ static int __osinfoProcessDevice(OsinfoDb *db,
 finished:
     // Add dev to db
     osinfo_list_add(OSINFO_LIST(devices), OSINFO_ENTITY(dev));
+    g_object_unref(dev);
     return 0;
     /* At end, cursor is at end of device node */
 
diff --git a/osinfo/osinfo_list.c b/osinfo/osinfo_list.c
index 7e2d833..b5eed93 100644
--- a/osinfo/osinfo_list.c
+++ b/osinfo/osinfo_list.c
@@ -38,7 +38,7 @@ osinfo_list_init (OsinfoList *self)
     OsinfoListPrivate *priv;
     self->priv = priv = OSINFO_LIST_GET_PRIVATE(self);
 
-    self->priv->array = g_ptr_array_new();
+    self->priv->array = g_ptr_array_new_with_free_func(g_object_unref);
 }
 
 gint osinfo_list_get_length(OsinfoList *self)
@@ -66,6 +66,7 @@ OsinfoEntity *osinfo_list_find_by_id(OsinfoList *self, const gchar *id)
 
 void osinfo_list_add(OsinfoList *self, OsinfoEntity *entity)
 {
+    g_object_ref(entity);
     g_ptr_array_add(self->priv->array, entity);
 }
 
-- 
1.7.2.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]