The main reason is to ensure that the private data are properly
allocated for every instance.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_audit.c | 2 +-
src/conf/domain_conf.c | 17 ++++++++++-------
src/conf/domain_conf.h | 2 +-
src/qemu/qemu_command.c | 2 +-
src/qemu/qemu_domain.c | 6 +++---
src/qemu/qemu_hotplug.c | 2 +-
6 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index b08233fa49..69c5792b07 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -898,7 +898,7 @@ virDomainAuditShmem(virDomainObj *vm,
{
char uuidstr[VIR_UUID_STRING_BUFLEN];
char *vmname = virAuditEncode("vm", vm->def->name);
- const char *srcpath = virDomainChrSourceDefGetPath(&def->server.chr);
+ const char *srcpath = virDomainChrSourceDefGetPath(def->server.chr);
const char *virt = virDomainAuditGetVirtType(vm->def);
char *shmpath = NULL;
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index da0c64b460..52f513f488 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -3069,7 +3069,7 @@ void virDomainShmemDefFree(virDomainShmemDef *def)
return;
virDomainDeviceInfoClear(&def->info);
- virDomainChrSourceDefClear(&def->server.chr);
+ virObjectUnref(def->server.chr);
g_free(def->name);
g_free(def);
}
@@ -13665,11 +13665,14 @@ virDomainShmemDefParseXML(virDomainXMLOption *xmlopt,
if ((server = virXPathNode("./server[1]", ctxt))) {
g_autofree char *tmp = NULL;
+ if (!(def->server.chr = virDomainChrSourceDefNew(xmlopt)))
+ return NULL;
+
def->server.enabled = true;
- def->server.chr.type = VIR_DOMAIN_CHR_TYPE_UNIX;
- def->server.chr.data.nix.listen = false;
+ def->server.chr->type = VIR_DOMAIN_CHR_TYPE_UNIX;
+ def->server.chr->data.nix.listen = false;
if ((tmp = virXMLPropString(server, "path")))
- def->server.chr.data.nix.path = virFileSanitizePath(tmp);
+ def->server.chr->data.nix.path = virFileSanitizePath(tmp);
}
if ((msi = virXPathNode("./msi[1]", ctxt))) {
@@ -16814,8 +16817,8 @@ virDomainShmemDefEquals(virDomainShmemDef *src,
return false;
if (src->server.enabled) {
- if (STRNEQ_NULLABLE(src->server.chr.data.nix.path,
- dst->server.chr.data.nix.path))
+ if (STRNEQ_NULLABLE(src->server.chr->data.nix.path,
+ dst->server.chr->data.nix.path))
return false;
}
@@ -25868,7 +25871,7 @@ virDomainShmemDefFormat(virBuffer *buf,
if (def->server.enabled) {
virBufferAddLit(buf, "<server");
- virBufferEscapeString(buf, " path='%s'",
def->server.chr.data.nix.path);
+ virBufferEscapeString(buf, " path='%s'",
def->server.chr->data.nix.path);
virBufferAddLit(buf, "/>\n");
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ab9a7d66f8..3cb68c5d0a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1997,7 +1997,7 @@ struct _virDomainShmemDef {
virDomainShmemRole role;
struct {
bool enabled;
- virDomainChrSourceDef chr;
+ virDomainChrSourceDef *chr;
} server;
struct {
bool enabled;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index f97cdc70ab..60336947b5 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9368,7 +9368,7 @@ qemuBuildShmemCommandLine(virLogManager *logManager,
if (shmem->server.enabled) {
chardev = qemuBuildChrChardevStr(logManager, secManager,
cmd, cfg, def,
- &shmem->server.chr,
+ shmem->server.chr,
shmem->info.alias, qemuCaps,
cdevflags);
if (!chardev)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index fb203bc830..e69215cee2 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -9964,11 +9964,11 @@ void
qemuDomainPrepareShmemChardev(virDomainShmemDef *shmem)
{
if (!shmem->server.enabled ||
- shmem->server.chr.data.nix.path)
+ shmem->server.chr->data.nix.path)
return;
- shmem->server.chr.data.nix.path =
g_strdup_printf("/var/lib/libvirt/shmem-%s-sock",
- shmem->name);
+ shmem->server.chr->data.nix.path =
g_strdup_printf("/var/lib/libvirt/shmem-%s-sock",
+ shmem->name);
}
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 3df0a1f17a..0e798dc237 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3064,7 +3064,7 @@ qemuDomainAttachShmemDevice(virQEMUDriver *driver,
qemuDomainObjEnterMonitor(driver, vm);
if (shmem->server.enabled) {
- if (qemuHotplugChardevAttach(priv->mon, charAlias, &shmem->server.chr)
< 0)
+ if (qemuHotplugChardevAttach(priv->mon, charAlias, shmem->server.chr) <
0)
goto exit_monitor;
} else {
if (qemuMonitorAddObject(priv->mon, &props, &memAlias) < 0)
--
2.31.1