}
if (vm->state != VIR_DOMAIN_PAUSED) {
int rc;
+ int state = vm->state;
+ vm->state = VIR_DOMAIN_PAUSED;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
rc = qemuMonitorStopCPUs(priv->mon);
qemuDomainObjExitMonitorWithDriver(driver, vm);
- if (rc < 0)
+ if (rc < 0) {
+ vm->state = state;
goto endjob;
- vm->state = VIR_DOMAIN_PAUSED;
+ }
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_SUSPENDED,
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
+ int state = vm->state;
int ret;
+ vm->state = VIR_DOMAIN_PAUSED;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
ret = qemuMonitorStopCPUs(priv->mon);
qemuDomainObjExitMonitorWithDriver(driver, vm);
if (ret == 0) {
virDomainEventPtr event;
- vm->state = VIR_DOMAIN_PAUSED;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_SUSPENDED,
VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED);
if (event)
qemuDomainEventQueue(driver, event);
- }
+ } else
+ vm->state = state;
return ret;
}
/* Pause */
if (vm->state == VIR_DOMAIN_RUNNING) {
header.was_running = 1;
+ vm->state = VIR_DOMAIN_PAUSED;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
if (qemuMonitorStopCPUs(priv->mon) < 0) {
qemuDomainObjExitMonitorWithDriver(driver, vm);
+ vm->state = VIR_DOMAIN_RUNNING;
goto endjob;
}
qemuDomainObjExitMonitorWithDriver(driver, vm);
- vm->state = VIR_DOMAIN_PAUSED;
}
/* Get XML for the domain */
/* Pause domain for non-live dump */
if (!(flags & VIR_DUMP_LIVE) && vm->state == VIR_DOMAIN_RUNNING) {
+ vm->state = VIR_DOMAIN_PAUSED;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
if (qemuMonitorStopCPUs(priv->mon) < 0) {
qemuDomainObjExitMonitorWithDriver(driver, vm);
+ vm->state = VIR_DOMAIN_RUNNING;
goto endjob;
}
qemuDomainObjExitMonitorWithDriver(driver, vm);
"%s", _("resuming after dump failed"));
}
qemuDomainObjExitMonitorWithDriver(driver, vm);
+ vm->state = VIR_DOMAIN_RUNNING;
}
if (qemuDomainObjEndJob(vm) == 0)
/* qemu unconditionally starts the domain running again after
* loadvm, so let's pause it to keep consistency
*/
+ int state = vm->state;
priv = vm->privateData;
+ vm->state = VIR_DOMAIN_PAUSED;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
rc = qemuMonitorStopCPUs(priv->mon);
qemuDomainObjExitMonitorWithDriver(driver, vm);
- if (rc < 0)
+ if (rc < 0) {
+ vm->state = state;
goto cleanup;
+ }
}
event = virDomainEventNewFromObj(vm,