virBufferAddLit(buf, "/>\n");
}
+ if (priv->fakeReboot)
+ virBufferAsprintf(buf, " <fakereboot/>\n");
+
return 0;
}
}
}
+ priv->fakeReboot = virXPathBoolean("boolean(./fakereboot)", ctxt) == 1;
+
return 0;
error:
}
virDomainRemoveInactive(&driver->domains, vm);
}
+
+void
+qemuDomainSetFakeReboot(struct qemud_driver *driver,
+ virDomainObjPtr vm,
+ bool value)
+{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+
+ if (priv->fakeReboot == value)
+ return;
+
+ priv->fakeReboot = value;
+
+ if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+ VIR_WARN("Failed to save status on vm %s", vm->def->name);
+}
void qemuDomainRemoveInactive(struct qemud_driver *driver,
virDomainObjPtr vm);
+void qemuDomainSetFakeReboot(struct qemud_driver *driver,
+ virDomainObjPtr vm,
+ bool value);
+
#endif /* __QEMU_DOMAIN_H__ */
goto endjob;
}
+ qemuDomainSetFakeReboot(driver, vm, false);
+
priv = vm->privateData;
qemuDomainObjEnterMonitor(driver, vm);
ret = qemuMonitorSystemPowerdown(priv->mon);
qemuDomainObjExitMonitor(driver, vm);
- priv->fakeReboot = false;
-
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0)
vm = NULL;
ret = qemuMonitorSystemPowerdown(priv->mon);
qemuDomainObjExitMonitor(driver, vm);
- priv->fakeReboot = true;
+ if (ret == 0)
+ qemuDomainSetFakeReboot(driver, vm, true);
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0)
virDomainObjPtr vm;
int ret = -1;
virDomainEventPtr event = NULL;
- qemuDomainObjPrivatePtr priv;
virCheckFlags(0, -1);
goto cleanup;
}
- priv = vm->privateData;
- priv->fakeReboot = false;
+ qemuDomainSetFakeReboot(driver, vm, false);
/* Although qemuProcessStop does this already, there may
* be an outstanding job active. We want to make sure we
priv->gotShutdown = true;
if (priv->fakeReboot) {
- priv->fakeReboot = false;
+ qemuDomainSetFakeReboot(qemu_driver, vm, false);
virDomainObjRef(vm);
virThread th;
if (virThreadCreate(&th,
goto cleanup;
vm->def->id = driver->nextvmid++;
- priv->fakeReboot = false;
+ qemuDomainSetFakeReboot(driver, vm, false);
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_UNKNOWN);
/* Run an early hook to set-up missing devices */