Signed-off-by: Rafael Fonseca <r4f4rfs(a)gmail.com>
---
src/libvirt_private.syms | 1 +
src/qemu/qemu_blockjob.c | 67 ++++++++++++++++-----------------------
src/qemu/qemu_domain.c | 11 +++----
src/util/virstoragefile.c | 43 ++++++++++++-------------
src/util/virstoragefile.h | 6 ++--
5 files changed, 57 insertions(+), 71 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index d96331e633..a5dc53b4f6 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3082,6 +3082,7 @@ virStorageGenerateQcowPassphrase;
# util/virstoragefile.h
+vir_storage_source_get_type;
virStorageAuthDefCopy;
virStorageAuthDefFormat;
virStorageAuthDefFree;
diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index 38fbba2b90..5aac483724 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -93,10 +93,10 @@ static void
qemuBlockJobDataDisposeJobdata(qemuBlockJobDataPtr job)
{
if (job->type == QEMU_BLOCKJOB_TYPE_CREATE)
- virObjectUnref(job->data.create.src);
+ g_object_unref(job->data.create.src);
if (job->type == QEMU_BLOCKJOB_TYPE_BACKUP) {
- virObjectUnref(job->data.backup.store);
+ g_object_unref(job->data.backup.store);
g_free(job->data.backup.bitmap);
}
}
@@ -107,10 +107,8 @@ qemuBlockJobDataDispose(GObject *obj)
{
qemuBlockJobDataPtr job = QEMU_BLOCK_JOB_DATA(obj);
- virObjectUnref(job->chain);
- job->chain = NULL;
- virObjectUnref(job->mirrorChain);
- job->mirrorChain = NULL;
+ g_clear_object(&job->chain);
+ g_clear_object(&job->mirrorChain);
G_OBJECT_CLASS(qemu_block_job_data_parent_class)->dispose(obj);
}
@@ -197,7 +195,7 @@ qemuBlockJobRegister(qemuBlockJobDataPtr job,
if (disk) {
job->disk = disk;
- job->chain = virObjectRef(disk->src);
+ job->chain = g_object_ref(disk->src);
QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob = g_object_ref(job);
}
@@ -349,9 +347,9 @@ qemuBlockJobNewCreate(virDomainObjPtr vm,
return NULL;
if (virStorageSourceIsBacking(chain))
- job->chain = virObjectRef(chain);
+ job->chain = g_object_ref(chain);
- job->data.create.src = virObjectRef(src);
+ job->data.create.src = g_object_ref(src);
if (qemuBlockJobRegister(job, vm, NULL, true) < 0)
return NULL;
@@ -382,7 +380,7 @@ qemuBlockJobDiskNewCopy(virDomainObjPtr vm,
if (!(job = qemuBlockJobDataNew(QEMU_BLOCKJOB_TYPE_COPY, jobname)))
return NULL;
- job->mirrorChain = virObjectRef(mirror);
+ job->mirrorChain = g_object_ref(mirror);
if (shallow && !reuse)
job->data.copy.shallownew = true;
@@ -411,7 +409,7 @@ qemuBlockJobDiskNewBackup(virDomainObjPtr vm,
return NULL;
job->data.backup.bitmap = g_strdup(bitmap);
- job->data.backup.store = virObjectRef(store);
+ job->data.backup.store = g_object_ref(store);
/* backup jobs are usually started in bulk by transaction so the caller
* shall save the status XML */
@@ -700,14 +698,12 @@ qemuBlockJobRewriteConfigDiskSource(virDomainObjPtr vm,
/* discard any detected backing store */
if (virStorageSourceIsBacking(n->backingStore) &&
n->backingStore->detected) {
- virObjectUnref(n->backingStore);
- n->backingStore = NULL;
+ g_clear_object(&n->backingStore);
break;
}
}
- virObjectUnref(persistDisk->src);
- persistDisk->src = g_steal_pointer(©);
+ g_set_object(&persistDisk->src, copy);
}
@@ -741,8 +737,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPtr driver,
disk->dst);
}
- virObjectUnref(disk->src);
- disk->src = disk->mirror;
+ g_set_object(&disk->src, disk->mirror);
} else {
if (disk->mirror) {
virDomainLockImageDetach(driver->lockManager, vm, disk->mirror);
@@ -752,7 +747,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPtr driver,
* Remove security driver metadata so that they are not leaked. */
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
- virObjectUnref(disk->mirror);
+ g_object_unref(disk->mirror);
}
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->src);
@@ -829,8 +824,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
* Remove security driver metadata so that they are not leaked. */
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
- virObjectUnref(disk->mirror);
- disk->mirror = NULL;
+ g_clear_object(&disk->mirror);
}
disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE;
disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN;
@@ -942,8 +936,8 @@ qemuBlockJobClearConfigChain(virDomainObjPtr vm,
if (!virStorageSourceIsSameLocation(disk->src, cfgdisk->src))
return;
- virObjectUnref(cfgdisk->src->backingStore);
- cfgdisk->src->backingStore = NULL;
+ if (cfgdisk->src->backingStore)
+ g_clear_object(&cfgdisk->src->backingStore);
}
@@ -1009,14 +1003,14 @@ qemuBlockJobProcessEventCompletedPull(virQEMUDriverPtr driver,
if (baseparent)
baseparent->backingStore = NULL;
qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, tmp);
- virObjectUnref(tmp);
+ g_clear_object(&tmp);
if (cfgdisk) {
tmp = cfgdisk->src->backingStore;
cfgdisk->src->backingStore = cfgbase;
if (cfgbaseparent)
cfgbaseparent->backingStore = NULL;
- virObjectUnref(tmp);
+ g_clear_object(&tmp);
}
}
@@ -1183,8 +1177,7 @@ qemuBlockJobProcessEventCompletedCommit(virQEMUDriverPtr driver,
if (job->data.commit.deleteCommittedImages)
qemuBlockJobDeleteImages(driver, vm, job->disk, job->data.commit.top);
- virObjectUnref(job->data.commit.top);
- job->data.commit.top = NULL;
+ g_clear_object(&job->data.commit.top);
if (cfgbaseparent) {
cfgbase = cfgbaseparent->backingStore;
@@ -1195,7 +1188,7 @@ qemuBlockJobProcessEventCompletedCommit(virQEMUDriverPtr driver,
else
cfgdisk->src = cfgbase;
- virObjectUnref(cfgtop);
+ g_clear_object(&cfgtop);
}
}
@@ -1261,7 +1254,7 @@ qemuBlockJobProcessEventCompletedActiveCommit(virQEMUDriverPtr
driver,
cfgbaseparent->backingStore = NULL;
cfgdisk->src = cfgbase;
cfgdisk->src->readonly = cfgtop->readonly;
- virObjectUnref(cfgtop);
+ g_clear_object(&cfgtop);
}
/* Move security driver metadata */
@@ -1277,11 +1270,9 @@ qemuBlockJobProcessEventCompletedActiveCommit(virQEMUDriverPtr
driver,
if (job->data.commit.deleteCommittedImages)
qemuBlockJobDeleteImages(driver, vm, job->disk, job->data.commit.top);
- virObjectUnref(job->data.commit.top);
- job->data.commit.top = NULL;
+ g_clear_object(&job->data.commit.top);
/* the mirror element does not serve functional purpose for the commit job */
- virObjectUnref(job->disk->mirror);
- job->disk->mirror = NULL;
+ g_clear_object(&job->disk->mirror);
}
@@ -1309,8 +1300,7 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver,
qemuBlockJobRewriteConfigDiskSource(vm, job->disk, job->disk->mirror);
qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob,
job->disk->src);
- virObjectUnref(job->disk->src);
- job->disk->src = g_steal_pointer(&job->disk->mirror);
+ g_set_object(&job->disk->src, job->disk->mirror);
}
@@ -1328,8 +1318,7 @@ qemuBlockJobProcessEventConcludedCopyAbort(virQEMUDriverPtr driver,
return;
qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob,
job->disk->mirror);
- virObjectUnref(job->disk->mirror);
- job->disk->mirror = NULL;
+ g_clear_object(&job->disk->mirror);
}
@@ -1350,8 +1339,7 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
* not leaking security driver metadata is more important. */
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
- virObjectUnref(disk->mirror);
- disk->mirror = NULL;
+ g_clear_object(&disk->mirror);
}
@@ -1401,8 +1389,7 @@ qemuBlockJobProcessEventConcludedCreate(virQEMUDriverPtr driver,
* it will handle further hotplug of the created volume and also that
* the 'chain' which was registered is under their control */
if (job->synchronous) {
- virObjectUnref(job->chain);
- job->chain = NULL;
+ g_clear_object(&job->chain);
return;
}
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a61c16eb2a..be7c6837b5 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1162,8 +1162,7 @@ qemuDomainDiskPrivateDispose(GObject *obj)
{
qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK(obj);
- virObjectUnref(priv->migrSource);
- priv->migrSource = NULL;
+ g_clear_object(&priv->migrSource);
g_clear_object(&priv->blockjob);
G_OBJECT_CLASS(qemu_domain_disk_private_parent_class)->dispose(obj);
@@ -2258,10 +2257,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv)
virHashRemoveAll(priv->blockjobs);
- virObjectUnref(priv->pflash0);
- priv->pflash0 = NULL;
- virObjectUnref(priv->pflash1);
- priv->pflash1 = NULL;
+ g_clear_object(&priv->pflash0);
+ g_clear_object(&priv->pflash1);
virDomainBackupDefFree(priv->backup);
priv->backup = NULL;
@@ -3396,7 +3393,7 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainObjPtr vm,
if (mirror) {
if (disk)
- job->mirrorChain = virObjectRef(disk->mirror);
+ job->mirrorChain = g_object_ref(disk->mirror);
else
invalidData = true;
}
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 0f26a81391..baec1602b4 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -45,7 +45,21 @@
VIR_LOG_INIT("util.storagefile");
-static virClassPtr virStorageSourceClass;
+G_DEFINE_TYPE(virStorageSource, vir_storage_source, G_TYPE_OBJECT);
+static void virStorageSourceFinalize(GObject *obj);
+
+static void
+vir_storage_source_init(virStorageSource *src G_GNUC_UNUSED)
+{
+}
+
+static void
+vir_storage_source_class_init(virStorageSourceClass *klass)
+{
+ GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+ obj->finalize = virStorageSourceFinalize;
+}
VIR_ENUM_IMPL(virStorage,
VIR_STORAGE_TYPE_LAST,
@@ -2682,8 +2696,7 @@ virStorageSourceBackingStoreClear(virStorageSourcePtr def)
VIR_FREE(def->backingStoreRaw);
/* recursively free backing chain */
- virObjectUnref(def->backingStore);
- def->backingStore = NULL;
+ g_clear_object(&def->backingStore);
}
@@ -2712,8 +2725,7 @@ virStorageSourceClear(virStorageSourcePtr def)
virStorageSourceSliceFree(def->sliceStorage);
- virObjectUnref(def->externalDataStore);
- def->externalDataStore = NULL;
+ g_clear_object(&def->externalDataStore);
virStorageNetHostDefFree(def->nhosts, def->hosts);
virStorageAuthDefFree(def->auth);
@@ -2739,34 +2751,21 @@ virStorageSourceClear(virStorageSourcePtr def)
static void
-virStorageSourceDispose(void *obj)
+virStorageSourceFinalize(GObject *obj)
{
- virStorageSourcePtr src = obj;
+ virStorageSourcePtr src = VIR_STORAGE_SOURCE(obj);
virStorageSourceClear(src);
-}
-
-static int
-virStorageSourceOnceInit(void)
-{
- if (!VIR_CLASS_NEW(virStorageSource, virClassForObject()))
- return -1;
-
- return 0;
+ G_OBJECT_CLASS(vir_storage_source_parent_class)->finalize(obj);
}
-VIR_ONCE_GLOBAL_INIT(virStorageSource);
-
virStorageSourcePtr
virStorageSourceNew(void)
{
- if (virStorageSourceInitialize() < 0)
- return NULL;
-
- return virObjectNew(virStorageSourceClass);
+ return VIR_STORAGE_SOURCE(g_object_new(VIR_TYPE_STORAGE_SOURCE, NULL));
}
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index a744bcbf5c..ce56e8e18e 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -275,7 +275,7 @@ typedef virStorageSource *virStorageSourcePtr;
* IMPORTANT: When adding fields to this struct it's also necessary to add
* appropriate code to the virStorageSourceCopy deep copy function */
struct _virStorageSource {
- virObject parent;
+ GObject parent;
unsigned int id; /* backing chain identifier, 0 is unset */
int type; /* virStorageType */
@@ -393,7 +393,9 @@ struct _virStorageSource {
bool ssh_host_key_check_disabled;
};
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSource, virObjectUnref);
+#define VIR_TYPE_STORAGE_SOURCE vir_storage_source_get_type()
+G_DECLARE_FINAL_TYPE(virStorageSource, vir_storage_source, VIR, STORAGE_SOURCE,
GObject);
+
#ifndef DEV_BSIZE
--
2.25.3