VIR_LOG_INIT("qemu.qemu_blockjob");
-void
-qemuBlockJobDataFree(qemuBlockJobDataPtr job)
+static virClassPtr qemuBlockJobDataClass;
+
+
+static void
+qemuBlockJobDataDispose(void *obj)
{
- if (!job)
- return;
+ qemuBlockJobDataPtr job = obj;
VIR_FREE(job->errmsg);
- VIR_FREE(job);
+}
+
+
+static int
+qemuBlockJobDataOnceInit(void)
+{
+ if (!VIR_CLASS_NEW(qemuBlockJobData, virClassForObject()))
+ return -1;
+
+ return 0;
+}
+
+
+VIR_ONCE_GLOBAL_INIT(qemuBlockJobData)
+
+qemuBlockJobDataPtr
+qemuBlockJobDataNew(void)
+{
+ if (qemuBlockJobDataInitialize() < 0)
+ return NULL;
+
+ return virObjectNew(qemuBlockJobDataClass);
}
typedef qemuBlockJobData *qemuBlockJobDataPtr;
struct _qemuBlockJobData {
+ virObject parent;
+
bool started;
int type;
int status;
bool synchronous; /* API call is waiting for this job */
};
-void
-qemuBlockJobDataFree(qemuBlockJobDataPtr job);
+qemuBlockJobDataPtr qemuBlockJobDataNew(void);
int qemuBlockJobUpdateDisk(virDomainObjPtr vm,
int asyncJob,
if (!(priv = virObjectNew(qemuDomainDiskPrivateClass)))
return NULL;
- if (VIR_ALLOC(priv->blockjob) < 0) {
+ if (!(priv->blockjob = qemuBlockJobDataNew())) {
virObjectUnref(priv);
priv = NULL;
}
virStorageSourceFree(priv->migrSource);
VIR_FREE(priv->qomName);
VIR_FREE(priv->nodeCopyOnRead);
- qemuBlockJobDataFree(priv->blockjob);
+ virObjectUnref(priv->blockjob);
}
static virClassPtr qemuDomainStorageSourcePrivateClass;