libvirt/libvirt-virDomainObjGetMessages-Refactor-using-GPtrArray.patch
Jiri Denemark 26e17db3c8 libvirt-10.10.0-6.el9
- build: Bump minimum glib2 version to 2.66.0 (RHEL-77884)
- qemuProcessHandleIOError: Refactor to extract 'priv' instead of 'driver' (RHEL-77884)
- qemu: Handle quirks of 'device' field of BLOCK_IO_ERROR event in monitor code (RHEL-77884)
- qemu: Rename 'diskAlias' to 'device' in qemu IO error event handling (RHEL-77884)
- qemuProcessHandleIOError: Rename local variables (RHEL-77884)
- qemuMonitorJSONHandleIOError: Do not munge 'reason' field of IO error event (RHEL-77884)
- qemuProcessHandleIOError: Prefer lookup by node name (RHEL-77884)
- qemuMonitorJSONHandleIOError: Propagate new 'qom-path' field (RHEL-77884)
- virStorageSource: Add fields for storing last I/O error message (RHEL-77884)
- qemuProcessHandleIOError: Populate I/O error reason to virStorageSource (RHEL-77884)
- qemuProcessHandleIOError: Log IO errors in the VM log file (RHEL-77884)
- libxlDomainGetMessages: Add existing flags to 'virCheckFlags' (RHEL-77884)
- virDomainObjGetMessages: Refactor using GPtrArray (RHEL-77884)
- virDomainGetMessages: Introduce VIR_DOMAIN_MESSAGE_IOERRORS (RHEL-77884)
- include: libvirt-domain: Reword documentation for @reason of VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON (RHEL-77884)
- include: libvirt-domain: Add 'message' @reason of VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON (RHEL-77884)
- qemuSnapshotForEachQcow2: Don't initialize 'nrollback' (RHEL-73315)
- qemu: process: Export qemuPrepareNVRAM for use in snapshot code (RHEL-73315)
- qemu: snapshot: Ensure that NVRAM image exists when taking inactive internal snapshot (RHEL-73315)
- qemuxmlconftest: Allow testing of the 'writable' flag for passed FDs for disks (RHEL-37519)
- qemuxmlconftest: Add testing of FDs with 'writable' flag in 'disk-source-fd' (RHEL-37519)
- qemu: domain: Initialize FD passthrough for a virStorageSource before using it (RHEL-37519)

Resolves: RHEL-37519, RHEL-73315, RHEL-77884
2025-02-07 15:56:31 +01:00

192 lines
6.0 KiB
Diff

From d3ebbc9040b3f58dcf790a6d53f09c2eb5119bfd Mon Sep 17 00:00:00 2001
Message-ID: <d3ebbc9040b3f58dcf790a6d53f09c2eb5119bfd.1738940191.git.jdenemar@redhat.com>
From: Peter Krempa <pkrempa@redhat.com>
Date: Mon, 27 Jan 2025 17:38:51 +0100
Subject: [PATCH] virDomainObjGetMessages: Refactor using GPtrArray
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Simplify the function especially by rewriting it using GPtrArray to
construct the string list, especially for the upcoming case when the
number of added elements will not be known beforehand and when
hypervisor specific data will be added.
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 1a02760cc6d79422dc4dd17b943915cd0ac15987)
https://issues.redhat.com/browse/RHEL-77884
---
src/conf/domain_conf.c | 36 +++++++-----------------------------
src/conf/domain_conf.h | 4 ++--
src/libxl/libxl_driver.c | 9 ++++++++-
src/qemu/qemu_driver.c | 9 ++++++++-
src/test/test_driver.c | 9 ++++++++-
5 files changed, 33 insertions(+), 34 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d3f30b08dc..8cd0fb83b6 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -31646,53 +31646,31 @@ virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev)
/**
* virDomainObjGetMessages:
* @vm: domain object
- * @msgs: pointer to a variable to store messages
+ * @m: GPtrArray to be filled with messages
* @flags: zero or more virDomainMessageType flags
- *
- * Returns number of messages stored in @msgs, -1 otherwise.
*/
-int
+void
virDomainObjGetMessages(virDomainObj *vm,
- char ***msgs,
+ GPtrArray *m,
unsigned int flags)
{
size_t i = 0;
- size_t n = 0;
- int nmsgs = 0;
- int rv = -1;
-
- *msgs = NULL;
if (!flags || (flags & VIR_DOMAIN_MESSAGE_TAINTING)) {
- nmsgs += __builtin_popcount(vm->taint);
- *msgs = g_renew(char *, *msgs, nmsgs+1);
-
for (i = 0; i < VIR_DOMAIN_TAINT_LAST; i++) {
if (vm->taint & (1 << i)) {
- (*msgs)[n++] = g_strdup_printf(
- _("tainted: %1$s"),
- _(virDomainTaintMessageTypeToString(i)));
+ g_ptr_array_add(m, g_strdup_printf(_("tainted: %1$s"),
+ _(virDomainTaintMessageTypeToString(i))));
}
}
}
if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) {
- nmsgs += vm->ndeprecations;
- *msgs = g_renew(char *, *msgs, nmsgs+1);
-
for (i = 0; i < vm->ndeprecations; i++) {
- (*msgs)[n++] = g_strdup_printf(
- _("deprecated configuration: %1$s"),
- vm->deprecations[i]);
+ g_ptr_array_add(m, g_strdup_printf(_("deprecated configuration: %1$s"),
+ vm->deprecations[i]));
}
}
-
- if (*msgs)
- (*msgs)[nmsgs] = NULL;
-
- rv = nmsgs;
-
- return rv;
}
bool
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 9f7c28343f..7058203e67 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -4576,9 +4576,9 @@ bool
virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev)
ATTRIBUTE_NONNULL(1);
-int
+void
virDomainObjGetMessages(virDomainObj *vm,
- char ***msgs,
+ GPtrArray *m,
unsigned int flags);
bool
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 26d22550ae..545d67de52 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -6572,6 +6572,7 @@ libxlDomainGetMessages(virDomainPtr dom,
char ***msgs,
unsigned int flags)
{
+ g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL;
int ret = -1;
@@ -6584,7 +6585,13 @@ libxlDomainGetMessages(virDomainPtr dom,
if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- ret = virDomainObjGetMessages(vm, msgs, flags);
+ virDomainObjGetMessages(vm, m, flags);
+
+ ret = m->len;
+ if (m->len > 0) {
+ g_ptr_array_add(m, NULL);
+ *msgs = (char **) g_ptr_array_steal(m, NULL);
+ }
cleanup:
virDomainObjEndAPI(&vm);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 09f7edda7d..276a7caded 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19811,6 +19811,7 @@ qemuDomainGetMessages(virDomainPtr dom,
char ***msgs,
unsigned int flags)
{
+ g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL;
int rv = -1;
@@ -19823,7 +19824,13 @@ qemuDomainGetMessages(virDomainPtr dom,
if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- rv = virDomainObjGetMessages(vm, msgs, flags);
+ virDomainObjGetMessages(vm, m, flags);
+
+ rv = m->len;
+ if (m->len > 0) {
+ g_ptr_array_add(m, NULL);
+ *msgs = (char **) g_ptr_array_steal(m, NULL);
+ }
cleanup:
virDomainObjEndAPI(&vm);
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index f1cefb5c50..a10ec3bc41 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -9522,6 +9522,7 @@ testDomainGetMessages(virDomainPtr dom,
char ***msgs,
unsigned int flags)
{
+ g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL;
int rv = -1;
@@ -9531,7 +9532,13 @@ testDomainGetMessages(virDomainPtr dom,
if (!(vm = testDomObjFromDomain(dom)))
return -1;
- rv = virDomainObjGetMessages(vm, msgs, flags);
+ virDomainObjGetMessages(vm, m, flags);
+
+ rv = m->len;
+ if (m->len > 0) {
+ g_ptr_array_add(m, NULL);
+ *msgs = (char **) g_ptr_array_steal(m, NULL);
+ }
virDomainObjEndAPI(&vm);
return rv;
--
2.48.1