]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: blockjob: Turn struct qemuBlockJobData into a virObject
authorPeter Krempa <pkrempa@redhat.com>
Wed, 14 Nov 2018 15:47:50 +0000 (16:47 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 17 Jan 2019 16:12:50 +0000 (17:12 +0100)
Reference counting will simplify semantics of the lifecycle of the
object.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_blockjob.c
src/qemu/qemu_blockjob.h
src/qemu/qemu_domain.c

index c7b7bfc944c13796819e1fed4918ca5e644397d5..ef71d8f0f9119067cc1aa179649e6bb9c553d172 100644 (file)
 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);
 }
 
 
index 178541417281fdfabbe7e7980a7fd4b348e541e1..fc794d3d0b6c08bdc5113ed61e78fea2749722dd 100644 (file)
@@ -30,6 +30,8 @@ typedef struct _qemuBlockJobData qemuBlockJobData;
 typedef qemuBlockJobData *qemuBlockJobDataPtr;
 
 struct _qemuBlockJobData {
+    virObject parent;
+
     bool started;
     int type;
     int status;
@@ -37,8 +39,7 @@ struct _qemuBlockJobData {
     bool synchronous; /* API call is waiting for this job */
 };
 
-void
-qemuBlockJobDataFree(qemuBlockJobDataPtr job);
+qemuBlockJobDataPtr qemuBlockJobDataNew(void);
 
 int qemuBlockJobUpdateDisk(virDomainObjPtr vm,
                            int asyncJob,
index aa8fe111470ad2294ca7bbdbc8294a5be06e17d6..7030aa448e14fe78991d61bdabe8a39765718c50 100644 (file)
@@ -1063,7 +1063,7 @@ qemuDomainDiskPrivateNew(void)
     if (!(priv = virObjectNew(qemuDomainDiskPrivateClass)))
         return NULL;
 
-    if (VIR_ALLOC(priv->blockjob) < 0) {
+    if (!(priv->blockjob = qemuBlockJobDataNew())) {
         virObjectUnref(priv);
         priv = NULL;
     }
@@ -1079,7 +1079,7 @@ qemuDomainDiskPrivateDispose(void *obj)
     virStorageSourceFree(priv->migrSource);
     VIR_FREE(priv->qomName);
     VIR_FREE(priv->nodeCopyOnRead);
-    qemuBlockJobDataFree(priv->blockjob);
+    virObjectUnref(priv->blockjob);
 }
 
 static virClassPtr qemuDomainStorageSourcePrivateClass;