ignore_value(virCondDestroy(&priv->job.asyncCond));
}
+static bool
+qemuDomainTrackJob(enum qemuDomainJob job)
+{
+ return (QEMU_DOMAIN_TRACK_JOBS & JOB_MASK(job)) != 0;
+}
+
static void *qemuDomainObjPrivateAlloc(void)
{
{
qemuDomainObjPrivatePtr priv = data;
const char *monitorpath;
+ enum qemuDomainJob job;
/* priv->monitor_chr is set only for qemu */
if (priv->monConfig) {
if (priv->lockState)
virBufferAsprintf(buf, " <lockstate>%s</lockstate>\n", priv->lockState);
+ job = priv->job.active;
+ if (!qemuDomainTrackJob(job))
+ priv->job.active = QEMU_JOB_NONE;
+
if (priv->job.active || priv->job.asyncJob) {
virBufferAsprintf(buf, " <job type='%s' async='%s'",
qemuDomainJobTypeToString(priv->job.active),
}
virBufferAddLit(buf, "/>\n");
}
+ priv->job.active = job;
if (priv->fakeReboot)
virBufferAsprintf(buf, " <fakereboot/>\n");
virDomainObjLock(obj);
}
- qemuDomainObjSaveJob(driver, obj);
+ if (qemuDomainTrackJob(job))
+ qemuDomainObjSaveJob(driver, obj);
return 0;
int qemuDomainObjEndJob(struct qemud_driver *driver, virDomainObjPtr obj)
{
qemuDomainObjPrivatePtr priv = obj->privateData;
+ enum qemuDomainJob job = priv->job.active;
priv->jobs_queued--;
VIR_DEBUG("Stopping job: %s (async=%s)",
- qemuDomainJobTypeToString(priv->job.active),
+ qemuDomainJobTypeToString(job),
qemuDomainAsyncJobTypeToString(priv->job.asyncJob));
qemuDomainObjResetJob(priv);
- qemuDomainObjSaveJob(driver, obj);
+ if (qemuDomainTrackJob(job))
+ qemuDomainObjSaveJob(driver, obj);
virCondSignal(&priv->job.cond);
return virDomainObjUnref(obj);
JOB_MASK(QEMU_JOB_DESTROY) | \
JOB_MASK(QEMU_JOB_ABORT))
+/* Jobs which have to be tracked in domain state XML. */
+# define QEMU_DOMAIN_TRACK_JOBS \
+ (JOB_MASK(QEMU_JOB_DESTROY) | \
+ JOB_MASK(QEMU_JOB_ASYNC))
+
/* Only 1 job is allowed at any time
* A job includes *all* monitor commands, even those just querying
* information, not merely actions */