virDomainObjUnref(obj);
}
+static int doStartCPUs(struct qemud_driver *driver, virDomainObjPtr vm, virConnectPtr conn)
+{
+ int ret;
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+
+ qemuDomainObjEnterMonitorWithDriver(driver, vm);
+ ret = qemuMonitorStartCPUs(priv->mon, conn);
+ if (ret == 0) {
+ vm->state = VIR_DOMAIN_RUNNING;
+ }
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
+
+ return ret;
+}
+
static int doStopCPUs(struct qemud_driver *driver, virDomainObjPtr vm)
{
int ret;
qemuDomainObjExitMonitorWithDriver(driver, vm);
goto cleanup;
}
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
if (!start_paused) {
DEBUG0("Starting domain CPUs");
/* Allow the CPUS to start executing */
- if (qemuMonitorStartCPUs(priv->mon, conn) < 0) {
+ if (doStartCPUs(driver, vm, conn) < 0) {
if (virGetLastError() == NULL)
qemuReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("resume operation failed"));
- qemuDomainObjExitMonitorWithDriver(driver, vm);
goto cleanup;
}
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
DEBUG0("Writing domain status to disk");
goto endjob;
}
if (vm->state == VIR_DOMAIN_PAUSED) {
- qemuDomainObjPrivatePtr priv = vm->privateData;
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorStartCPUs(priv->mon, dom->conn) < 0) {
- qemuDomainObjExitMonitorWithDriver(driver, vm);
+ if (doStartCPUs(driver, vm, dom->conn) < 0) {
if (virGetLastError() == NULL)
qemuReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("resume operation failed"));
goto endjob;
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- vm->state = VIR_DOMAIN_RUNNING;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_RESUMED,
VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
if (vm) {
if (ret != 0) {
if (header.was_running && virDomainObjIsActive(vm)) {
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- rc = qemuMonitorStartCPUs(priv->mon, dom->conn);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
+ rc = doStartCPUs(driver, vm, dom->conn);
if (rc < 0)
VIR_WARN0("Unable to resume guest CPUs after save failure");
- else
- vm->state = VIR_DOMAIN_RUNNING;
}
if (cgroup != NULL) {
will support synchronous operations so we always get here after
the migration is complete. */
else if (resume && paused && virDomainObjIsActive(vm)) {
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorStartCPUs(priv->mon, dom->conn) < 0) {
+ if (doStartCPUs(driver, vm, dom->conn) < 0) {
if (virGetLastError() == NULL)
qemuReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("resuming after dump failed"));
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- vm->state = VIR_DOMAIN_RUNNING;
}
if (qemuDomainObjEndJob(vm) == 0)
char *dumpfile;
int i;
- qemuDomainObjPrivatePtr priv = wdEvent->vm->privateData;
-
i = virAsprintf(&dumpfile, "%s/%s-%u",
driver->autoDumpPath,
wdEvent->vm->def->name,
qemuReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("Dump failed"));
- qemuDomainObjEnterMonitorWithDriver(driver, wdEvent->vm);
- ret = qemuMonitorStartCPUs(priv->mon, NULL);
- qemuDomainObjExitMonitorWithDriver(driver, wdEvent->vm);
+ ret = doStartCPUs(driver, wdEvent->vm, NULL);
if (ret < 0)
qemuReportError(VIR_ERR_OPERATION_FAILED,
/* If it was running before, resume it now. */
if (header->was_running) {
- qemuDomainObjPrivatePtr priv = vm->privateData;
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorStartCPUs(priv->mon, conn) < 0) {
+ if (doStartCPUs(driver, vm, conn) < 0) {
if (virGetLastError() == NULL)
qemuReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("failed to resume domain"));
- qemuDomainObjExitMonitorWithDriver(driver,vm);
goto out;
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- vm->state = VIR_DOMAIN_RUNNING;
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
VIR_WARN("Failed to save status on vm %s", vm->def->name);
goto out;
endjob:
if (resume && vm->state == VIR_DOMAIN_PAUSED) {
/* we got here through some sort of failure; start the domain again */
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorStartCPUs(priv->mon, dom->conn) < 0) {
+ if (doStartCPUs(driver, vm, dom->conn) < 0) {
/* Hm, we already know we are in error here. We don't want to
* overwrite the previous error, though, so we just throw something
* to the logs and hope for the best
VIR_ERROR(_("Failed to resume guest %s after failure"),
vm->def->name);
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- vm->state = VIR_DOMAIN_RUNNING;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_RESUMED,
VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
* >= 0.10.6 to work properly. This isn't strictly necessary on
* older qemu's, but it also doesn't hurt anything there
*/
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorStartCPUs(priv->mon, dconn) < 0) {
+ if (doStartCPUs(driver, vm, dconn) < 0) {
if (virGetLastError() == NULL)
qemuReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("resume operation failed"));
- qemuDomainObjExitMonitorWithDriver(driver, vm);
goto endjob;
}
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-
- vm->state = VIR_DOMAIN_RUNNING;
}
event = virDomainEventNewFromObj(vm,