Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_process.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index e3d9f3d..19ecf59 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3339,6 +3339,7 @@ qemuProcessReconnect(void *opaque)
size_t i;
int ret;
unsigned int stopFlags = 0;
+ bool jobStarted = false;
VIR_FREE(data);
@@ -3349,13 +3350,14 @@ qemuProcessReconnect(void *opaque)
cfg = virQEMUDriverGetConfig(driver);
priv = obj->privateData;
+ if (qemuDomainObjBeginJob(driver, obj, QEMU_JOB_MODIFY) < 0)
+ goto error;
+ jobStarted = true;
+
/* XXX If we ever gonna change pid file pattern, come up with
* some intelligence here to deal with old paths. */
if (!(priv->pidfile = virPidFileBuildPath(cfg->stateDir,
obj->def->name)))
- goto killvm;
-
- if (qemuDomainObjBeginJob(driver, obj, QEMU_JOB_MODIFY) < 0)
- goto killvm;
+ goto error;
virNWFilterReadLockFilterUpdates();
@@ -3425,7 +3427,6 @@ qemuProcessReconnect(void *opaque)
VIR_DEBUG("Finishing shutdown sequence for domain %s",
obj->def->name);
qemuProcessShutdownOrReboot(driver, obj);
- qemuDomainObjEndJob(driver, obj);
goto cleanup;
}
@@ -3498,12 +3499,18 @@ qemuProcessReconnect(void *opaque)
if (virAtomicIntInc(&driver->nactive) == 1 &&
driver->inhibitCallback)
driver->inhibitCallback(true, driver->inhibitOpaque);
- qemuDomainObjEndJob(driver, obj);
- goto cleanup;
+ cleanup:
+ if (jobStarted)
+ qemuDomainObjEndJob(driver, obj);
+ if (!virDomainObjIsActive(obj))
+ qemuDomainRemoveInactive(driver, obj);
+ virDomainObjEndAPI(&obj);
+ virObjectUnref(conn);
+ virObjectUnref(cfg);
+ virNWFilterUnlockFilterUpdates();
+ return;
error:
- qemuDomainObjEndJob(driver, obj);
- killvm:
if (virDomainObjIsActive(obj)) {
/* We can't get the monitor back, so must kill the VM
* to remove danger of it ending up running twice if
@@ -3521,14 +3528,7 @@ qemuProcessReconnect(void *opaque)
}
qemuProcessStop(driver, obj, state, stopFlags);
}
-
- qemuDomainRemoveInactive(driver, obj);
-
- cleanup:
- virDomainObjEndAPI(&obj);
- virObjectUnref(conn);
- virObjectUnref(cfg);
- virNWFilterUnlockFilterUpdates();
+ goto cleanup;
}
static int
--
2.7.1