qom: Use atomics for object refcounting

Object reference counts will soon be changed outside the BQL. So we need
to use atomics in object_ref/unref.

Based on a patch by Liu Ping Fan.

Signed-off-by: Liu Ping Fan <qemulist@gmail.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Jan Kiszka 2013-07-02 11:36:39 +02:00 committed by Paolo Bonzini
parent 856d72454f
commit f08c03f3c4

View File

@ -683,16 +683,15 @@ GSList *object_class_get_list(const char *implements_type,
void object_ref(Object *obj)
{
obj->ref++;
atomic_inc(&obj->ref);
}
void object_unref(Object *obj)
{
g_assert(obj->ref > 0);
obj->ref--;
/* parent always holds a reference to its children */
if (obj->ref == 0) {
if (atomic_fetch_dec(&obj->ref) == 1) {
object_finalize(obj);
}
}