]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: monitor: Don't resist stealing 'actions' in qemuMonitorJSONTransaction
authorPeter Krempa <pkrempa@redhat.com>
Fri, 30 Mar 2018 10:35:52 +0000 (12:35 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 3 Apr 2018 11:34:33 +0000 (13:34 +0200)
Rather than trying to prevent stealing of the 'actions' virJSONValue
into the monitor command replace the code so that it does the same
thing, since 'actions' was actually not really used after calling the
monitor.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_driver.c
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h

index 072eb54b4801a46f10a6edd68211ce172eb1562d..20c7cefccfa422a2507246da9d2d883375c32b9a 100644 (file)
@@ -14811,7 +14811,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
         if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
             goto cleanup;
 
-        ret = qemuMonitorTransaction(priv->mon, actions);
+        ret = qemuMonitorTransaction(priv->mon, &actions);
 
         if (qemuDomainObjExitMonitor(driver, vm) < 0 || ret < 0) {
             ret = -1;
@@ -14855,7 +14855,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
         }
     }
 
-    if (ret == 0 || !actions) {
+    if (ret == 0 || !do_transaction) {
         if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0 ||
             (persist && virDomainSaveConfig(cfg->configDir, driver->caps,
                                             vm->newDef) < 0))
index e169553b7e1781da307ddb0be23fed5540baf36c..7b647525b3bb21993cb47cbae45c8840a2d8a5df 100644 (file)
@@ -3386,9 +3386,9 @@ qemuMonitorDriveMirror(qemuMonitorPtr mon,
 
 /* Use the transaction QMP command to run atomic snapshot commands.  */
 int
-qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
+qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr *actions)
 {
-    VIR_DEBUG("actions=%p", actions);
+    VIR_DEBUG("actions=%p", *actions);
 
     QEMU_CHECK_MONITOR_JSON(mon);
 
index 7a223235042e26c885839dc5079174f3245ca8a7..d04148e568314b875115e861eb19aa8e1a4cdafc 100644 (file)
@@ -898,7 +898,7 @@ int qemuMonitorDiskSnapshot(qemuMonitorPtr mon,
                             const char *file,
                             const char *format,
                             bool reuse);
-int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
+int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr *actions)
     ATTRIBUTE_NONNULL(2);
 int qemuMonitorDriveMirror(qemuMonitorPtr mon,
                            const char *device,
index de915eabb46b205b9e47997a320ec58133b8c495..1fd09a33985d690006cf17668649d7d45eb67d8c 100644 (file)
@@ -4125,18 +4125,14 @@ qemuMonitorJSONDriveMirror(qemuMonitorPtr mon,
 }
 
 int
-qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
+qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr *actions)
 {
     int ret = -1;
     virJSONValuePtr cmd;
     virJSONValuePtr reply = NULL;
-    virJSONValuePtr act = actions;
-    bool protect = actions->protect;
 
-    /* We do NOT want to free actions when recursively freeing cmd.  */
-    actions->protect = true;
     cmd = qemuMonitorJSONMakeCommand("transaction",
-                                     "a:actions", &act,
+                                     "a:actions", actions,
                                      NULL);
     if (!cmd)
         goto cleanup;
@@ -4151,7 +4147,6 @@ qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
  cleanup:
     virJSONValueFree(cmd);
     virJSONValueFree(reply);
-    actions->protect = protect;
     return ret;
 }
 
index 846d366b27a5de870e3ff89c34a24d64374e9306..045df4919f0ae88127d1e1c5c518fddb32df724e 100644 (file)
@@ -253,7 +253,7 @@ int qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon,
                                 bool reuse)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3)
     ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5);
-int qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
+int qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr *actions)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 int qemuMonitorJSONDriveMirror(qemuMonitorPtr mon,
                                const char *device,