virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("conn=%p refs=%d", conn, conn->object.refs);
+ VIR_DEBUG("conn=%p refs=%d", conn, conn->object.u.s.refs);
virObjectRef(conn);
return 0;
}
return -1;
}
- VIR_DOMAIN_DEBUG(domain, "refs=%d", domain->object.refs);
+ VIR_DOMAIN_DEBUG(domain, "refs=%d", domain->object.u.s.refs);
virObjectRef(domain);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("network=%p refs=%d", network, network->object.refs);
+ VIR_DEBUG("network=%p refs=%d", network, network->object.u.s.refs);
virObjectRef(network);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("iface=%p refs=%d", iface, iface->object.refs);
+ VIR_DEBUG("iface=%p refs=%d", iface, iface->object.u.s.refs);
virObjectRef(iface);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("pool=%p refs=%d", pool, pool->object.refs);
+ VIR_DEBUG("pool=%p refs=%d", pool, pool->object.u.s.refs);
virObjectRef(pool);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("vol=%p refs=%d", vol, vol->object.refs);
+ VIR_DEBUG("vol=%p refs=%d", vol, vol->object.u.s.refs);
virObjectRef(vol);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("dev=%p refs=%d", dev, dev->object.refs);
+ VIR_DEBUG("dev=%p refs=%d", dev, dev->object.u.s.refs);
virObjectRef(dev);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("secret=%p refs=%d", secret, secret->object.refs);
+ VIR_DEBUG("secret=%p refs=%d", secret, secret->object.u.s.refs);
virObjectRef(secret);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("stream=%p refs=%d", stream, stream->object.refs);
+ VIR_DEBUG("stream=%p refs=%d", stream, stream->object.u.s.refs);
virObjectRef(stream);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("nwfilter=%p refs=%d", nwfilter, nwfilter->object.refs);
+ VIR_DEBUG("nwfilter=%p refs=%d", nwfilter, nwfilter->object.u.s.refs);
virObjectRef(nwfilter);
return 0;
}
virDispatchError(NULL);
return -1;
}
- VIR_DEBUG("snapshot=%p, refs=%d", snapshot, snapshot->object.refs);
+ VIR_DEBUG("snapshot=%p, refs=%d", snapshot, snapshot->object.u.s.refs);
virObjectRef(snapshot);
return 0;
}
PROBE(QEMU_MONITOR_NEW,
"mon=%p refs=%d fd=%d",
- mon, mon->parent.parent.refs, mon->fd);
+ mon, mon->parent.parent.u.s.refs, mon->fd);
virObjectUnlock(mon);
return mon;
virObjectLock(mon);
PROBE(QEMU_MONITOR_CLOSE,
- "mon=%p refs=%d", mon, mon->parent.parent.refs);
+ "mon=%p refs=%d", mon, mon->parent.parent.u.s.refs);
if (mon->fd >= 0) {
if (mon->watch) {
klass->objectSize - sizeof(virObject)) < 0)
return NULL;
- obj->magic = klass->magic;
+ obj->u.s.magic = klass->magic;
obj->klass = klass;
- virAtomicIntSet(&obj->refs, 1);
+ virAtomicIntSet(&obj->u.s.refs, 1);
PROBE(OBJECT_NEW, "obj=%p classname=%s", obj, obj->klass->name);
if (!obj)
return false;
- bool lastRef = virAtomicIntDecAndTest(&obj->refs);
+ bool lastRef = virAtomicIntDecAndTest(&obj->u.s.refs);
PROBE(OBJECT_UNREF, "obj=%p", obj);
if (lastRef) {
PROBE(OBJECT_DISPOSE, "obj=%p", obj);
/* Clear & poison object */
memset(obj, 0, obj->klass->objectSize);
- obj->magic = 0xDEADBEEF;
+ obj->u.s.magic = 0xDEADBEEF;
obj->klass = (void*)0xDEADBEEF;
VIR_FREE(obj);
}
if (!obj)
return NULL;
- virAtomicIntInc(&obj->refs);
+ virAtomicIntInc(&obj->u.s.refs);
PROBE(OBJECT_REF, "obj=%p", obj);
return anyobj;
}
typedef void (*virObjectDisposeCallback)(void *obj);
+/* Most code should not play with the contents of this struct; however,
+ * the struct itself is public so that it can be embedded as the first
+ * field of a subclassed object. */
struct _virObject {
- unsigned int magic;
- int refs;
+ /* Ensure correct alignment of this and all subclasses, even on
+ * platforms where 'long long' or function pointers have stricter
+ * requirements than 'void *'. */
+ union {
+ long long dummy_align1;
+ void (*dummy_align2) (void);
+ struct {
+ unsigned int magic;
+ int refs;
+ } s;
+ } u;
virClassPtr klass;
};