[libvirt] [PATCH] Fix detection of JSON when restarting libvirtd

Daniel P. Berrange berrange at redhat.com
Wed Dec 9 18:30:16 UTC 2009


The XML XPath for detecting JSON in the running VM statefile was
wrong causing all VMs to get JSON mode enabled at libvirtd restart.

In addition if a VM was running a JSON enabled QEMU once, and then
altered to point to a non-JSON enabled QEMU later the 'monJSON'
flag would not get reset to 0.

* src/qemu/qemu_driver.c: Fix setting/detection of JSON mode
---
 src/qemu/qemu_driver.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0dccae6..3661ef0 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -220,8 +220,11 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
         priv->monConfig->type = VIR_DOMAIN_CHR_TYPE_PTY;
     VIR_FREE(tmp);
 
-    if (virXPathBoolean(NULL, "int(./monitor[1]/@json)", ctxt))
+    if (virXPathBoolean(NULL, "count(./monitor[@json = '1']) > 0", ctxt)) {
         priv->monJSON = 1;
+    } else {
+        priv->monJSON = 0;
+    }
 
     switch (priv->monConfig->type) {
     case VIR_DOMAIN_CHR_TYPE_PTY:
@@ -2361,7 +2364,9 @@ static int qemudStartVMDaemon(virConnectPtr conn,
 #if HAVE_YAJL
     if (qemuCmdFlags & QEMUD_CMD_FLAG_MONITOR_JSON)
         priv->monJSON = 1;
+    else
 #endif
+        priv->monJSON = 0;
 
     if ((ret = virFileDeletePid(driver->stateDir, vm->def->name)) != 0) {
         virReportSystemError(conn, ret,
-- 
1.6.5.2




More information about the libvir-list mailing list