]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: blockjob: Consume new block job state in the processing function
authorPeter Krempa <pkrempa@redhat.com>
Mon, 26 Nov 2018 14:29:55 +0000 (15:29 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 17 Jan 2019 16:12:50 +0000 (17:12 +0100)
The processing function modifies the job state so it should make sure
that the variable holding the new state is cleared properly and not the
caller. The caller should only deal with the job state and not the
transition that happened.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_blockjob.c

index 7b9805641362fa43c3758cac8e54b3d83803a050..f26e1bdd574f46380bd537f3b951e3785a5c66aa 100644 (file)
@@ -286,6 +286,9 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
               job->state,
               job->newstate);
 
+    if (job->newstate == -1)
+        return;
+
     qemuBlockJobEmitEvents(driver, vm, disk, job->type, job->newstate);
 
     /* If we completed a block pull or commit, then update the XML
@@ -315,6 +318,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
     }
 
     job->state = job->newstate;
+    job->newstate = -1;
 
     if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
         VIR_WARN("Unable to save status on vm %s after block job", vm->def->name);
@@ -347,14 +351,13 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm,
 {
     qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob;
     qemuDomainObjPrivatePtr priv = vm->privateData;
-    int state = job->newstate;
 
-    if (state != -1) {
-        qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob);
-        job->newstate = -1;
-    }
+    if (job->newstate == -1)
+        return -1;
+
+    qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob);
 
-    return state;
+    return job->state;
 }