mirror of https://github.com/xemu-project/xemu.git
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:
parent
856d72454f
commit
f08c03f3c4
|
@ -683,16 +683,15 @@ GSList *object_class_get_list(const char *implements_type,
|
||||||
|
|
||||||
void object_ref(Object *obj)
|
void object_ref(Object *obj)
|
||||||
{
|
{
|
||||||
obj->ref++;
|
atomic_inc(&obj->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
void object_unref(Object *obj)
|
void object_unref(Object *obj)
|
||||||
{
|
{
|
||||||
g_assert(obj->ref > 0);
|
g_assert(obj->ref > 0);
|
||||||
obj->ref--;
|
|
||||||
|
|
||||||
/* parent always holds a reference to its children */
|
/* parent always holds a reference to its children */
|
||||||
if (obj->ref == 0) {
|
if (atomic_fetch_dec(&obj->ref) == 1) {
|
||||||
object_finalize(obj);
|
object_finalize(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue