On 03/07/2013 11:14 AM, Stefan Berger wrote:
Extend the QEMU private domain structure with virFdSet.
Persist the virFdSet using XML and parse its XML.
Free the FdSet upon domain stop.
Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
---
Index: libvirt/src/qemu/qemu_domain.c
===================================================================
--- libvirt.orig/src/qemu/qemu_domain.c
+++ libvirt/src/qemu/qemu_domain.c
@@ -252,6 +252,7 @@ static void qemuDomainObjPrivateFree(voi
qemuAgentClose(priv->agent);
}
VIR_FREE(priv->cleanupCallbacks);
+ virObjectUnref(priv->fdset);
VIR_FREE(priv);
}
@@ -326,6 +327,10 @@ static int qemuDomainObjPrivateXMLFormat
if (priv->fakeReboot)
virBufferAsprintf(buf, " <fakereboot/>\n");
+ virBufferAdjustIndent(buf, 2);
+ virFdSetFormatXML(priv->fdset, buf);
Oops - potential NULL deref - virFdSetParseXML requires a non-null arg,
but you haven't yet added in the code that guarantees that priv->fdset
exists on a running domain (and for an offline domain, you are
intentionally leaving priv->fdset NULL).
Still, I can fix it, so ACK, and no need to send a v10, depending on how
3/3 fares:
diff --git i/src/qemu/qemu_domain.c w/src/qemu/qemu_domain.c
index cfd4b8e..22c7ade 100644
--- i/src/qemu/qemu_domain.c
+++ w/src/qemu/qemu_domain.c
@@ -327,9 +327,11 @@ static int
qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
if (priv->fakeReboot)
virBufferAsprintf(buf, " <fakereboot/>\n");
- virBufferAdjustIndent(buf, 2);
- virFdSetFormatXML(priv->fdset, buf);
- virBufferAdjustIndent(buf, -2);
+ if (priv->fdset) {
+ virBufferAdjustIndent(buf, 2);
+ virFdSetFormatXML(priv->fdset, buf);
+ virBufferAdjustIndent(buf, -2);
+ }
return 0;
}
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org