qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH] qom: Make object_unref() free the object's memory w


From: alexander_barabash
Subject: [Qemu-devel] [PATCH] qom: Make object_unref() free the object's memory when refcount goes to 0.
Date: Wed, 22 Feb 2012 20:00:50 +0200

From: Alexander Barabash <address@hidden>

In the existing implementation, object_delete()
calls object_unref(), then frees the object's storage.
Running object_delete() on an object with reference count
different from 1 causes program failure.

In the existing implementation, object_unref()
finalizes the object when its reference count becomes 0.

In the new implementation, object_unref()
finalizes and frees the object's storage when the reference count becomes 0.

In the new implementation, object_delete()
just calls object_unref().
Running object_delete() on an object with reference count
different from 1 still causes program failure.

Signed-off-by: Alexander Barabash <address@hidden>
---
 qom/object.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/qom/object.c b/qom/object.c
index e6591e1..8d36a9c 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -373,9 +373,8 @@ Object *object_new(const char *typename)
 
 void object_delete(Object *obj)
 {
+    g_assert(obj->ref == 1);
     object_unref(obj);
-    g_assert(obj->ref == 0);
-    g_free(obj);
 }
 
 static bool type_is_ancestor(TypeImpl *type, TypeImpl *target_type)
@@ -585,6 +584,7 @@ void object_unref(Object *obj)
     /* parent always holds a reference to its children */
     if (obj->ref == 0) {
         object_finalize(obj);
+        g_free(obj);
     }
 }
 
-- 
1.7.5.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]