[PATCH v2 38/40] conf: convert virDomain*Private to GObject

Rafael Fonseca r4f4rfs at gmail.com
Tue Apr 21 13:49:19 UTC 2020


Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
---
 src/conf/domain_conf.c    |  21 ++-
 src/conf/domain_conf.h    |  18 +-
 src/qemu/qemu_domain.c    | 359 +++++++++++++++++---------------------
 src/qemu/qemu_domain.h    | 145 ++++++++++-----
 src/util/virstoragefile.c |   2 +-
 src/util/virstoragefile.h |   3 +-
 6 files changed, 286 insertions(+), 262 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index fa87fb0590..15a0c2d881 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1785,7 +1785,7 @@ void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def)
         virDomainGraphicsListenDefClear(&def->listens[i]);
     VIR_FREE(def->listens);
 
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
     VIR_FREE(def);
 }
 
@@ -1833,7 +1833,7 @@ static virDomainVcpuDefPtr
 virDomainVcpuDefNew(virDomainXMLOptionPtr xmlopt)
 {
     virDomainVcpuDefPtr ret = NULL;
-    g_autoptr(virObject) priv = NULL;
+    g_autoptr(GObject) priv = NULL;
 
     if (xmlopt && xmlopt->privateData.vcpuNew &&
         !(priv = xmlopt->privateData.vcpuNew()))
@@ -1856,7 +1856,7 @@ virDomainVcpuDefFree(virDomainVcpuDefPtr info)
 
     virBitmapFree(info->cpumask);
     info->cpumask = NULL;
-    virObjectUnref(info->privateData);
+    g_clear_object(&info->privateData);
     VIR_FREE(info);
 }
 
@@ -2158,7 +2158,7 @@ virDomainDiskDefFree(virDomainDiskDefPtr def)
     VIR_FREE(def->blkdeviotune.group_name);
     VIR_FREE(def->virtio);
     virDomainDeviceInfoClear(&def->info);
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
 
     VIR_FREE(def);
 }
@@ -2361,7 +2361,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
     VIR_FREE(def->dst);
     virDomainDeviceInfoClear(&def->info);
     VIR_FREE(def->virtio);
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
     VIR_FREE(def->binary);
 
     VIR_FREE(def);
@@ -2422,7 +2422,7 @@ virDomainVsockDefFree(virDomainVsockDefPtr vsock)
     if (!vsock)
         return;
 
-    virObjectUnref(vsock->privateData);
+    g_clear_object(&vsock->privateData);
     virDomainDeviceInfoClear(&vsock->info);
     VIR_FREE(vsock);
 }
@@ -2510,7 +2510,7 @@ virDomainNetDefFree(virDomainNetDefPtr def)
     if (!def)
         return;
     virDomainNetDefClear(def);
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
     VIR_FREE(def);
 }
 
@@ -2651,8 +2651,7 @@ virDomainChrSourceDefDispose(GObject *obj)
 {
     virDomainChrSourceDefPtr def = VIR_DOMAIN_CHR_SOURCE_DEF(obj);
 
-    virObjectUnref(def->privateData);
-    def->privateData = NULL;
+    g_clear_object(&def->privateData);
 
     G_OBJECT_CLASS(vir_domain_chr_source_def_parent_class)->dispose(obj);
 }
@@ -2909,7 +2908,7 @@ virDomainVideoDefClear(virDomainVideoDefPtr def)
     if (def->driver)
         VIR_FREE(def->driver->vhost_user_binary);
     VIR_FREE(def->driver);
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
 
     memset(def, 0, sizeof(*def));
 }
@@ -27098,7 +27097,7 @@ virDomainRNGDefFree(virDomainRNGDefPtr def)
         VIR_FREE(def->source.file);
         break;
     case VIR_DOMAIN_RNG_BACKEND_EGD:
-        virObjectUnref(def->source.chardev);
+        g_clear_object(&def->source.chardev);
         break;
     case VIR_DOMAIN_RNG_BACKEND_BUILTIN:
     case VIR_DOMAIN_RNG_BACKEND_LAST:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index c9a44ecfd8..ae9a064106 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -528,7 +528,7 @@ typedef enum {
 struct _virDomainDiskDef {
     virStorageSourcePtr src; /* non-NULL.  XXX Allow NULL for empty cdrom? */
 
-    virObjectPtr privateData;
+    GObject *privateData;
 
     int device; /* enum virDomainDiskDevice */
     int bus; /* enum virDomainDiskBus */
@@ -852,7 +852,7 @@ struct _virDomainFSDef {
     virTristateSwitch posix_lock;
     virTristateSwitch flock;
     virDomainVirtioOptionsPtr virtio;
-    virObjectPtr privateData;
+    GObject *privateData;
 };
 
 
@@ -1071,7 +1071,7 @@ struct _virDomainNetDef {
     unsigned int mtu;
     virNetDevCoalescePtr coalesce;
     virDomainVirtioOptionsPtr virtio;
-    virObjectPtr privateData;
+    GObject *privateData;
 };
 
 typedef enum {
@@ -1190,7 +1190,7 @@ struct _virDomainChrSourceReconnectDef {
 struct _virDomainChrSourceDef {
     GObject parent;
     int type; /* virDomainChrType */
-    virObjectPtr privateData;
+    GObject *privateData;
     union {
         /* no <source> for null, vc, stdio */
         struct {
@@ -1493,7 +1493,7 @@ struct _virDomainVideoDriverDef {
 };
 
 struct _virDomainVideoDef {
-    virObjectPtr privateData;
+    GObject *privateData;
 
     int type;   /* enum virDomainVideoType */
     unsigned int ram;  /* kibibytes (multiples of 1024) */
@@ -1640,7 +1640,7 @@ struct _virDomainGraphicsListenDef {
 };
 
 struct _virDomainGraphicsDef {
-    virObjectPtr privateData;
+    GObject *privateData;
 
     /* Port value discipline:
      * Value -1 is legacy syntax indicating that it should be auto-allocated.
@@ -2318,7 +2318,7 @@ struct _virDomainVcpuDef {
 
     virDomainThreadSchedParam sched;
 
-    virObjectPtr privateData;
+    GObject *privateData;
 };
 
 struct _virDomainBlkiotune {
@@ -2416,7 +2416,7 @@ typedef enum {
 } virDomainVsockModel;
 
 struct _virDomainVsockDef {
-    virObjectPtr privateData;
+    GObject *privateData;
 
     virDomainVsockModel model;
     unsigned int guest_cid;
@@ -2774,7 +2774,7 @@ struct _virDomainDefParserConfig {
 
 typedef void *(*virDomainXMLPrivateDataAllocFunc)(void *);
 typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
-typedef virObjectPtr (*virDomainXMLPrivateDataNewFunc)(void);
+typedef GObject* (*virDomainXMLPrivateDataNewFunc)(void);
 typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr,
                                                  virDomainObjPtr);
 typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr,
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 99478890b6..7f6ac10659 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1130,362 +1130,329 @@ qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo)
 }
 
 
-static virClassPtr qemuDomainDiskPrivateClass;
-static void qemuDomainDiskPrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainDiskPrivate, qemu_domain_disk_private, G_TYPE_OBJECT);
+static void qemuDomainDiskPrivateDispose(GObject *obj);
+static void qemuDomainDiskPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainDiskPrivateOnceInit(void)
+static void
+qemu_domain_disk_private_init(qemuDomainDiskPrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainDiskPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainDiskPrivate);
+static void
+qemu_domain_disk_private_class_init(qemuDomainDiskPrivateClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+    obj->dispose = qemuDomainDiskPrivateDispose;
+    obj->finalize = qemuDomainDiskPrivateFinalize;
+}
 
-static virObjectPtr
+static GObject *
 qemuDomainDiskPrivateNew(void)
 {
-    qemuDomainDiskPrivatePtr priv;
+    return g_object_new(QEMU_TYPE_DOMAIN_DISK_PRIVATE, NULL);
+}
 
-    if (qemuDomainDiskPrivateInitialize() < 0)
-        return NULL;
+static void
+qemuDomainDiskPrivateDispose(GObject *obj)
+{
+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK(obj);
 
-    if (!(priv = virObjectNew(qemuDomainDiskPrivateClass)))
-        return NULL;
+    virObjectUnref(priv->migrSource);
+    priv->migrSource = NULL;
+    g_clear_object(&priv->blockjob);
 
-    return (virObjectPtr) priv;
+    G_OBJECT_CLASS(qemu_domain_disk_private_parent_class)->dispose(obj);
 }
 
 static void
-qemuDomainDiskPrivateDispose(void *obj)
+qemuDomainDiskPrivateFinalize(GObject *obj)
 {
-    qemuDomainDiskPrivatePtr priv = obj;
+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK(obj);
 
-    virObjectUnref(priv->migrSource);
     VIR_FREE(priv->qomName);
     VIR_FREE(priv->nodeCopyOnRead);
-    g_clear_object(&priv->blockjob);
+
+    G_OBJECT_CLASS(qemu_domain_disk_private_parent_class)->finalize(obj);
 }
 
-static virClassPtr qemuDomainStorageSourcePrivateClass;
-static void qemuDomainStorageSourcePrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainStorageSourcePrivate, qemu_domain_storage_source_private, G_TYPE_OBJECT);
+static void qemuDomainStorageSourcePrivateFinalize(GObject *obj);
 
-static int
-qemuDomainStorageSourcePrivateOnceInit(void)
+static void
+qemu_domain_storage_source_private_init(qemuDomainStorageSourcePrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainStorageSourcePrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainStorageSourcePrivate);
-
-virObjectPtr
-qemuDomainStorageSourcePrivateNew(void)
+static void
+qemu_domain_storage_source_private_class_init(qemuDomainStorageSourcePrivateClass *klass)
 {
-    qemuDomainStorageSourcePrivatePtr priv;
-
-    if (qemuDomainStorageSourcePrivateInitialize() < 0)
-        return NULL;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    if (!(priv = virObjectNew(qemuDomainStorageSourcePrivateClass)))
-        return NULL;
+    obj->finalize = qemuDomainStorageSourcePrivateFinalize;
+}
 
-    return (virObjectPtr) priv;
+GObject *
+qemuDomainStorageSourcePrivateNew(void)
+{
+    return g_object_new(QEMU_TYPE_DOMAIN_STORAGE_SOURCE_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainStorageSourcePrivateDispose(void *obj)
+qemuDomainStorageSourcePrivateFinalize(GObject *obj)
 {
-    qemuDomainStorageSourcePrivatePtr priv = obj;
+    qemuDomainStorageSourcePrivatePtr priv = QEMU_DOMAIN_STORAGE_SOURCE(obj);
 
     g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
     g_clear_pointer(&priv->encinfo, qemuDomainSecretInfoFree);
+
+    G_OBJECT_CLASS(qemu_domain_storage_source_private_parent_class)->finalize(obj);
 }
 
 
-static virClassPtr qemuDomainVcpuPrivateClass;
-static void qemuDomainVcpuPrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainVcpuPrivate, qemu_domain_vcpu_private, G_TYPE_OBJECT);
+static void qemuDomainVcpuPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainVcpuPrivateOnceInit(void)
+static void
+qemu_domain_vcpu_private_init(qemuDomainVcpuPrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainVcpuPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainVcpuPrivate);
-
-static virObjectPtr
-qemuDomainVcpuPrivateNew(void)
+static void
+qemu_domain_vcpu_private_class_init(qemuDomainVcpuPrivateClass *klass)
 {
-    qemuDomainVcpuPrivatePtr priv;
-
-    if (qemuDomainVcpuPrivateInitialize() < 0)
-        return NULL;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    if (!(priv = virObjectNew(qemuDomainVcpuPrivateClass)))
-        return NULL;
+    obj->finalize = qemuDomainVcpuPrivateFinalize;
+}
 
-    return (virObjectPtr) priv;
+static GObject *
+qemuDomainVcpuPrivateNew(void)
+{
+    return g_object_new(QEMU_TYPE_DOMAIN_VCPU_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainVcpuPrivateDispose(void *obj)
+qemuDomainVcpuPrivateFinalize(GObject *obj)
 {
-    qemuDomainVcpuPrivatePtr priv = obj;
+    qemuDomainVcpuPrivatePtr priv = QEMU_DOMAIN_VCPU(obj);
 
     VIR_FREE(priv->type);
     VIR_FREE(priv->alias);
     virJSONValueFree(priv->props);
-    return;
+
+    G_OBJECT_CLASS(qemu_domain_vcpu_private_parent_class)->finalize(obj);
 }
 
 
-static virClassPtr qemuDomainChrSourcePrivateClass;
-static void qemuDomainChrSourcePrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainChrSourcePrivate, qemu_domain_chr_source_private, G_TYPE_OBJECT);
+static void qemuDomainChrSourcePrivateFinalize(GObject *obj);
 
-static int
-qemuDomainChrSourcePrivateOnceInit(void)
+static void
+qemu_domain_chr_source_private_init(qemuDomainChrSourcePrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainChrSourcePrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainChrSourcePrivate);
-
-static virObjectPtr
-qemuDomainChrSourcePrivateNew(void)
+static void
+qemu_domain_chr_source_private_class_init(qemuDomainChrSourcePrivateClass *klass)
 {
-    qemuDomainChrSourcePrivatePtr priv;
-
-    if (qemuDomainChrSourcePrivateInitialize() < 0)
-        return NULL;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    if (!(priv = virObjectNew(qemuDomainChrSourcePrivateClass)))
-        return NULL;
+    obj->finalize = qemuDomainChrSourcePrivateFinalize;
+}
 
-    return (virObjectPtr) priv;
+static GObject *
+qemuDomainChrSourcePrivateNew(void)
+{
+    return g_object_new(QEMU_TYPE_DOMAIN_CHR_SOURCE_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainChrSourcePrivateDispose(void *obj)
+qemuDomainChrSourcePrivateFinalize(GObject *obj)
 {
-    qemuDomainChrSourcePrivatePtr priv = obj;
+    qemuDomainChrSourcePrivatePtr priv = QEMU_DOMAIN_CHR_SOURCE(obj);
 
     g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
+
+    G_OBJECT_CLASS(qemu_domain_chr_source_private_parent_class)->finalize(obj);
 }
 
 
-static virClassPtr qemuDomainVsockPrivateClass;
-static void qemuDomainVsockPrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainVsockPrivate, qemu_domain_vsock_private, G_TYPE_OBJECT);
+static void qemuDomainVsockPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainVsockPrivateOnceInit(void)
+static void
+qemu_domain_vsock_private_init(qemuDomainVsockPrivate *priv)
 {
-    if (!VIR_CLASS_NEW(qemuDomainVsockPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
+    priv->vhostfd = -1;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainVsockPrivate);
-
-static virObjectPtr
-qemuDomainVsockPrivateNew(void)
+static void
+qemu_domain_vsock_private_class_init(qemuDomainVsockPrivateClass *klass)
 {
-    qemuDomainVsockPrivatePtr priv;
-
-    if (qemuDomainVsockPrivateInitialize() < 0)
-        return NULL;
-
-    if (!(priv = virObjectNew(qemuDomainVsockPrivateClass)))
-        return NULL;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    priv->vhostfd = -1;
+    obj->finalize = qemuDomainVsockPrivateFinalize;
+}
 
-    return (virObjectPtr) priv;
+static GObject *
+qemuDomainVsockPrivateNew(void)
+{
+    return g_object_new(QEMU_TYPE_DOMAIN_VSOCK_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainVsockPrivateDispose(void *obj G_GNUC_UNUSED)
+qemuDomainVsockPrivateFinalize(GObject *obj)
 {
-    qemuDomainVsockPrivatePtr priv = obj;
+    qemuDomainVsockPrivatePtr priv = QEMU_DOMAIN_VSOCK(obj);
 
     VIR_FORCE_CLOSE(priv->vhostfd);
+
+    G_OBJECT_CLASS(qemu_domain_vsock_private_parent_class)->finalize(obj);
 }
 
 
-static virClassPtr qemuDomainGraphicsPrivateClass;
-static void qemuDomainGraphicsPrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainGraphicsPrivate, qemu_domain_graphics_private, G_TYPE_OBJECT);
+static void qemuDomainGraphicsPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainGraphicsPrivateOnceInit(void)
+static void
+qemu_domain_graphics_private_init(qemuDomainGraphicsPrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainGraphicsPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainGraphicsPrivate);
-
-static virObjectPtr
-qemuDomainGraphicsPrivateNew(void)
+static void
+qemu_domain_graphics_private_class_init(qemuDomainGraphicsPrivateClass *klass)
 {
-    qemuDomainGraphicsPrivatePtr priv;
-
-    if (qemuDomainGraphicsPrivateInitialize() < 0)
-        return NULL;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    if (!(priv = virObjectNew(qemuDomainGraphicsPrivateClass)))
-        return NULL;
+    obj->finalize = qemuDomainGraphicsPrivateFinalize;
+}
 
-    return (virObjectPtr) priv;
+static GObject *
+qemuDomainGraphicsPrivateNew(void)
+{
+    return g_object_new(QEMU_TYPE_DOMAIN_GRAPHICS_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainGraphicsPrivateDispose(void *obj)
+qemuDomainGraphicsPrivateFinalize(GObject *obj)
 {
-    qemuDomainGraphicsPrivatePtr priv = obj;
+    qemuDomainGraphicsPrivatePtr priv = QEMU_DOMAIN_GRAPHICS(obj);
 
     VIR_FREE(priv->tlsAlias);
     g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
-}
 
+    G_OBJECT_CLASS(qemu_domain_graphics_private_parent_class)->finalize(obj);
+}
 
-static virClassPtr qemuDomainNetworkPrivateClass;
-static void qemuDomainNetworkPrivateDispose(void *obj);
 
+G_DEFINE_TYPE(qemuDomainNetworkPrivate, qemu_domain_network_private, G_TYPE_OBJECT);
+static void qemuDomainNetworkPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainNetworkPrivateOnceInit(void)
+static void
+qemu_domain_network_private_init(qemuDomainNetworkPrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainNetworkPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
+static void
+qemu_domain_network_private_class_init(qemuDomainNetworkPrivateClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainNetworkPrivate);
+    obj->finalize = qemuDomainNetworkPrivateFinalize;
+}
 
 
-static virObjectPtr
+static GObject *
 qemuDomainNetworkPrivateNew(void)
 {
-    qemuDomainNetworkPrivatePtr priv;
-
-    if (qemuDomainNetworkPrivateInitialize() < 0)
-        return NULL;
-
-    if (!(priv = virObjectNew(qemuDomainNetworkPrivateClass)))
-        return NULL;
-
-    return (virObjectPtr) priv;
+    return g_object_new(QEMU_TYPE_DOMAIN_NETWORK_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainNetworkPrivateDispose(void *obj G_GNUC_UNUSED)
+qemuDomainNetworkPrivateFinalize(GObject *obj)
 {
-    qemuDomainNetworkPrivatePtr priv = obj;
+    qemuDomainNetworkPrivatePtr priv = QEMU_DOMAIN_NETWORK(obj);
 
     qemuSlirpFree(priv->slirp);
-}
 
+    G_OBJECT_CLASS(qemu_domain_network_private_parent_class)->finalize(obj);
+}
 
-static virClassPtr qemuDomainFSPrivateClass;
-static void qemuDomainFSPrivateDispose(void *obj);
 
+G_DEFINE_TYPE(qemuDomainFSPrivate, qemu_domain_fs_private, G_TYPE_OBJECT);
+static void qemuDomainFSPrivateFinalize(GObject *obj);
 
-static int
-qemuDomainFSPrivateOnceInit(void)
+static void
+qemu_domain_fs_private_init(qemuDomainFSPrivate *priv G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(qemuDomainFSPrivate, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
+static void
+qemu_domain_fs_private_class_init(qemuDomainFSPrivateClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainFSPrivate);
-
+    obj->finalize = qemuDomainFSPrivateFinalize;
+}
 
-static virObjectPtr
+static GObject *
 qemuDomainFSPrivateNew(void)
 {
-    qemuDomainFSPrivatePtr priv;
-
-    if (qemuDomainFSPrivateInitialize() < 0)
-        return NULL;
-
-    if (!(priv = virObjectNew(qemuDomainFSPrivateClass)))
-        return NULL;
-
-    return (virObjectPtr) priv;
+    return g_object_new(QEMU_TYPE_DOMAIN_FS_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainFSPrivateDispose(void *obj)
+qemuDomainFSPrivateFinalize(GObject *obj)
 {
-    qemuDomainFSPrivatePtr priv = obj;
+    qemuDomainFSPrivatePtr priv = QEMU_DOMAIN_FS(obj);
 
     g_free(priv->vhostuser_fs_sock);
+
+    G_OBJECT_CLASS(qemu_domain_fs_private_parent_class)->finalize(obj);
 }
 
-static virClassPtr qemuDomainVideoPrivateClass;
-static void qemuDomainVideoPrivateDispose(void *obj);
+G_DEFINE_TYPE(qemuDomainVideoPrivate, qemu_domain_video_private, G_TYPE_OBJECT);
+static void qemuDomainVideoPrivateFinalize(GObject *obj);
 
+static void
+qemu_domain_video_private_init(qemuDomainVideoPrivate *priv)
+{
+    priv->vhost_user_fd = -1;
+}
 
-static int
-qemuDomainVideoPrivateOnceInit(void)
+static void
+qemu_domain_video_private_class_init(qemuDomainVideoPrivateClass *klass)
 {
-    if (!VIR_CLASS_NEW(qemuDomainVideoPrivate, virClassForObject()))
-        return -1;
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
-    return 0;
+    obj->finalize = qemuDomainVideoPrivateFinalize;
 }
 
-VIR_ONCE_GLOBAL_INIT(qemuDomainVideoPrivate);
 
-
-static virObjectPtr
+static GObject *
 qemuDomainVideoPrivateNew(void)
 {
-    qemuDomainVideoPrivatePtr priv;
-
-    if (qemuDomainVideoPrivateInitialize() < 0)
-        return NULL;
-
-    if (!(priv = virObjectNew(qemuDomainVideoPrivateClass)))
-        return NULL;
-
-    priv->vhost_user_fd = -1;
-
-    return (virObjectPtr) priv;
+    return g_object_new(QEMU_TYPE_DOMAIN_VIDEO_PRIVATE, NULL);
 }
 
 
 static void
-qemuDomainVideoPrivateDispose(void *obj)
+qemuDomainVideoPrivateFinalize(GObject *obj)
 {
-    qemuDomainVideoPrivatePtr priv = obj;
+    qemuDomainVideoPrivatePtr priv = QEMU_DOMAIN_VIDEO(obj);
 
     VIR_FORCE_CLOSE(priv->vhost_user_fd);
+
+    G_OBJECT_CLASS(qemu_domain_video_private_parent_class)->finalize(obj);
 }
 
 
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index cf19f4d101..7dbd3ffc69 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -433,13 +433,8 @@ struct _qemuDomainObjPrivate {
 #define QEMU_DOMAIN_PRIVATE(vm) \
     ((qemuDomainObjPrivatePtr) (vm)->privateData)
 
-#define QEMU_DOMAIN_DISK_PRIVATE(disk) \
-    ((qemuDomainDiskPrivatePtr) (disk)->privateData)
-
-typedef struct _qemuDomainDiskPrivate qemuDomainDiskPrivate;
-typedef qemuDomainDiskPrivate *qemuDomainDiskPrivatePtr;
 struct _qemuDomainDiskPrivate {
-    virObject parent;
+    GObject parent;
 
     /* ideally we want a smarter way to interlock block jobs on single qemu disk
      * in the future, but for now we just disallow any concurrent job on a
@@ -457,13 +452,20 @@ struct _qemuDomainDiskPrivate {
     char *nodeCopyOnRead; /* nodename of the disk-wide copy-on-read blockdev layer */
 };
 
-#define QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src) \
-    ((qemuDomainStorageSourcePrivatePtr) (src)->privateData)
+#define QEMU_TYPE_DOMAIN_DISK_PRIVATE qemu_domain_disk_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainDiskPrivate,
+                     qemu_domain_disk_private,
+                     QEMU,
+                     DOMAIN_DISK,
+                     GObject);
+typedef qemuDomainDiskPrivate *qemuDomainDiskPrivatePtr;
+
+#define QEMU_DOMAIN_DISK_PRIVATE(disk) \
+    ((qemuDomainDiskPrivatePtr) (disk)->privateData)
+
 
-typedef struct _qemuDomainStorageSourcePrivate qemuDomainStorageSourcePrivate;
-typedef qemuDomainStorageSourcePrivate *qemuDomainStorageSourcePrivatePtr;
 struct _qemuDomainStorageSourcePrivate {
-    virObject parent;
+    GObject parent;
 
     /* data required for authentication to the storage source */
     qemuDomainSecretInfoPtr secinfo;
@@ -475,12 +477,23 @@ struct _qemuDomainStorageSourcePrivate {
     qemuDomainSecretInfoPtr httpcookie;
 };
 
-virObjectPtr qemuDomainStorageSourcePrivateNew(void);
+#define QEMU_TYPE_DOMAIN_STORAGE_SOURCE_PRIVATE qemu_domain_storage_source_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainStorageSourcePrivate,
+                     qemu_domain_storage_source_private,
+                     QEMU,
+                     DOMAIN_STORAGE_SOURCE,
+                     GObject);
+typedef qemuDomainStorageSourcePrivate *qemuDomainStorageSourcePrivatePtr;
+
+#define QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src) \
+    ((qemuDomainStorageSourcePrivatePtr) (src)->privateData)
+
+
+GObject *qemuDomainStorageSourcePrivateNew(void);
+
 
-typedef struct _qemuDomainVcpuPrivate qemuDomainVcpuPrivate;
-typedef qemuDomainVcpuPrivate *qemuDomainVcpuPrivatePtr;
 struct _qemuDomainVcpuPrivate {
-    virObject parent;
+    GObject parent;
 
     pid_t tid; /* vcpu thread id */
     int enable_id; /* order in which the vcpus were enabled in qemu */
@@ -500,6 +513,14 @@ struct _qemuDomainVcpuPrivate {
     int vcpus;
 };
 
+#define QEMU_TYPE_DOMAIN_VCPU_PRIVATE qemu_domain_vcpu_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainVcpuPrivate,
+                     qemu_domain_vcpu_private,
+                     QEMU,
+                     DOMAIN_VCPU,
+                     GObject);
+typedef qemuDomainVcpuPrivate *qemuDomainVcpuPrivatePtr;
+
 #define QEMU_DOMAIN_VCPU_PRIVATE(vcpu) \
     ((qemuDomainVcpuPrivatePtr) (vcpu)->privateData)
 
@@ -513,77 +534,113 @@ struct qemuDomainDiskInfo {
     char *nodename;
 };
 
-#define QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev) \
-    ((qemuDomainChrSourcePrivatePtr) (dev)->privateData)
-
-typedef struct _qemuDomainChrSourcePrivate qemuDomainChrSourcePrivate;
-typedef qemuDomainChrSourcePrivate *qemuDomainChrSourcePrivatePtr;
 struct _qemuDomainChrSourcePrivate {
-    virObject parent;
+    GObject parent;
 
     /* for char devices using secret
      * NB: *not* to be written to qemu domain object XML */
     qemuDomainSecretInfoPtr secinfo;
 };
 
+#define QEMU_TYPE_DOMAIN_CHR_SOURCE_PRIVATE qemu_domain_chr_source_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainChrSourcePrivate,
+                     qemu_domain_chr_source_private,
+                     QEMU,
+                     DOMAIN_CHR_SOURCE,
+                     GObject);
+typedef qemuDomainChrSourcePrivate *qemuDomainChrSourcePrivatePtr;
+
+#define QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev) \
+    ((qemuDomainChrSourcePrivatePtr) (dev)->privateData)
+
 
-typedef struct _qemuDomainVsockPrivate qemuDomainVsockPrivate;
-typedef qemuDomainVsockPrivate *qemuDomainVsockPrivatePtr;
 struct _qemuDomainVsockPrivate {
-    virObject parent;
+    GObject parent;
 
     int vhostfd;
 };
 
+#define QEMU_TYPE_DOMAIN_VSOCK_PRIVATE qemu_domain_vsock_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainVsockPrivate,
+                     qemu_domain_vsock_private,
+                     QEMU,
+                     DOMAIN_VSOCK,
+                     GObject);
+typedef qemuDomainVsockPrivate *qemuDomainVsockPrivatePtr;
 
-#define QEMU_DOMAIN_VIDEO_PRIVATE(dev) \
-    ((qemuDomainVideoPrivatePtr) (dev)->privateData)
 
-typedef struct _qemuDomainVideoPrivate qemuDomainVideoPrivate;
-typedef qemuDomainVideoPrivate *qemuDomainVideoPrivatePtr;
 struct _qemuDomainVideoPrivate {
-    virObject parent;
+    GObject parent;
 
     int vhost_user_fd;
 };
 
+#define QEMU_TYPE_DOMAIN_VIDEO_PRIVATE qemu_domain_video_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainVideoPrivate,
+                     qemu_domain_video_private,
+                     QEMU,
+                     DOMAIN_VIDEO,
+                     GObject);
+typedef qemuDomainVideoPrivate *qemuDomainVideoPrivatePtr;
+
+#define QEMU_DOMAIN_VIDEO_PRIVATE(dev) \
+    ((qemuDomainVideoPrivatePtr) (dev)->privateData)
 
-#define QEMU_DOMAIN_GRAPHICS_PRIVATE(dev) \
-    ((qemuDomainGraphicsPrivatePtr) (dev)->privateData)
 
-typedef struct _qemuDomainGraphicsPrivate qemuDomainGraphicsPrivate;
-typedef qemuDomainGraphicsPrivate *qemuDomainGraphicsPrivatePtr;
 struct _qemuDomainGraphicsPrivate {
-    virObject parent;
+    GObject parent;
 
     char *tlsAlias;
     qemuDomainSecretInfoPtr secinfo;
 };
 
+#define QEMU_TYPE_DOMAIN_GRAPHICS_PRIVATE qemu_domain_graphics_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainGraphicsPrivate,
+                     qemu_domain_graphics_private,
+                     QEMU,
+                     DOMAIN_GRAPHICS,
+                     GObject);
+typedef qemuDomainGraphicsPrivate *qemuDomainGraphicsPrivatePtr;
+
+#define QEMU_DOMAIN_GRAPHICS_PRIVATE(dev) \
+    ((qemuDomainGraphicsPrivatePtr) (dev)->privateData)
 
-#define QEMU_DOMAIN_NETWORK_PRIVATE(dev) \
-    ((qemuDomainNetworkPrivatePtr) (dev)->privateData)
 
-typedef struct _qemuDomainNetworkPrivate qemuDomainNetworkPrivate;
-typedef qemuDomainNetworkPrivate *qemuDomainNetworkPrivatePtr;
 struct _qemuDomainNetworkPrivate {
-    virObject parent;
+    GObject parent;
 
     qemuSlirpPtr slirp;
 };
 
+#define QEMU_TYPE_DOMAIN_NETWORK_PRIVATE qemu_domain_network_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainNetworkPrivate,
+                     qemu_domain_network_private,
+                     QEMU,
+                     DOMAIN_NETWORK,
+                     GObject);
+typedef qemuDomainNetworkPrivate *qemuDomainNetworkPrivatePtr;
+
+#define QEMU_DOMAIN_NETWORK_PRIVATE(dev) \
+    ((qemuDomainNetworkPrivatePtr) (dev)->privateData)
 
-#define QEMU_DOMAIN_FS_PRIVATE(dev) \
-    ((qemuDomainFSPrivatePtr) (dev)->privateData)
 
-typedef struct _qemuDomainFSPrivate qemuDomainFSPrivate;
-typedef qemuDomainFSPrivate *qemuDomainFSPrivatePtr;
 struct _qemuDomainFSPrivate {
-    virObject parent;
+    GObject parent;
 
     char *vhostuser_fs_sock;
 };
 
+#define QEMU_TYPE_DOMAIN_FS_PRIVATE qemu_domain_fs_private_get_type()
+G_DECLARE_FINAL_TYPE(qemuDomainFSPrivate,
+                     qemu_domain_fs_private,
+                     QEMU,
+                     DOMAIN_FS,
+                     GObject);
+typedef qemuDomainFSPrivate *qemuDomainFSPrivatePtr;
+
+#define QEMU_DOMAIN_FS_PRIVATE(dev) \
+    ((qemuDomainFSPrivatePtr) (dev)->privateData)
+
 
 typedef enum {
     QEMU_PROCESS_EVENT_WATCHDOG = 0,
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index ffc8bdb344..0f26a81391 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2717,7 +2717,7 @@ virStorageSourceClear(virStorageSourcePtr def)
 
     virStorageNetHostDefFree(def->nhosts, def->hosts);
     virStorageAuthDefFree(def->auth);
-    virObjectUnref(def->privateData);
+    g_clear_object(&def->privateData);
 
     VIR_FREE(def->nodestorage);
     VIR_FREE(def->nodeformat);
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 7939c09cd5..a744bcbf5c 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -30,6 +30,7 @@
 #include "virsecret.h"
 #include "virenum.h"
 #include "virpci.h"
+#include <glib-object.h>
 
 /* Minimum header size required to probe all known formats with
  * virStorageFileProbeFormat, or obtain metadata from a known format.
@@ -304,7 +305,7 @@ struct _virStorageSource {
 
     virStorageSourceInitiatorDef initiator;
 
-    virObjectPtr privateData;
+    GObject *privateData;
 
     int format; /* virStorageFileFormat in domain backing chains, but
                  * pool-specific enum for storage volumes */
-- 
2.25.3





More information about the libvir-list mailing list