On 03/30/2012 11:06 AM, Michal Privoznik wrote:
On 30.03.2012 09:50, Laine Stump wrote:
> commit b0e2bb33 set a default value for the SPICE agent channel by
> inserting it during parsing of the channel XML. That method of setting
> a default is problematic because it makes a format/parse roundtrip
> unclean, and experience with setting other values as a side effect of
> parsing has led to headaches (e.g. automatically setting a MAC address
> in the parser when one isn't specified in the input XML).
>
> This patch reverts commit b0e2bb33 and replaces it with the alternate
> implementation of simply inserting the default value in the
> appropriate place on the qemu commandline when no value is provided.
> ---
>
> (Playing the devil's advocate on my own patch for a moment - one
> advantage of Christophe's method of setting the default is that if we
> use that object somewhere else in libvirt's code in the future, the
> value will be set even if the XML left it unset, but with my method we
> will have to check for a NULL name and replace it with the default
> value anywhere we want to use it. So I won't say that either method is
> definitely the proper way to go, but will just present this
> alternative and see if someone else has an even stronger opinion than
> me :-)
>
> (BTW, I think I've decided while typing this message that, if we
> decide to change from the original method of setting default to this
> new method, the change should be pushed as two separate patches - one
> reverting the original, and another adding the new. It's too close to
> morning for me to take the time to do that right now, though.)
>
> src/conf/domain_conf.c | 7 -------
> src/qemu/qemu_command.c | 6 +++---
> 2 files changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 24e10e6..ea558bb 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -5248,13 +5248,6 @@ virDomainChrDefParseXML(virCapsPtr caps,
> goto error;
> } else {
> def->source.data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_VDAGENT;
> - if (!def->target.name) {
> - def->target.name = strdup("com.redhat.spice.0");
> - if (!def->target.name) {
> - virReportOOMError();
> - goto error;
> - }
> - }
> }
> }
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 3d2bb6b..50b1e6d 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -3457,9 +3457,9 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev,
> qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC))) {
> virBufferAsprintf(&buf, ",chardev=char%s,id=%s",
> dev->info.alias, dev->info.alias);
> - if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
> - dev->target.name) {
> - virBufferAsprintf(&buf, ",name=%s", dev->target.name);
> + if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL) {
> + virBufferAsprintf(&buf, ",name=%s", dev->target.name
> + ? dev->target.name :
"com.redhat.spice.0");
> }
> } else {
> virBufferAsprintf(&buf, ",id=%s", dev->info.alias);
ACK
Maybe it's worth squashing this in:
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3d2bb6b..3a14727 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3444,8 +3444,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr
dev,
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC &&
- dev->target.name &&
- STRNEQ(dev->target.name, "com.redhat.spice.0")) {
+ STRNEQ_NULLABLE(dev->target.name, "com.redhat.spice.0")) {
Sure, that's a nice reduction in line count, and optimization.
I pushed it with that change.
Thanks! (to Eric and Christophe as well).