559
qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
562
struct qemud_driver *driver = qemu_driver;
563
virDomainEventPtr event = NULL;
565
virDomainObjLock(vm);
566
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
567
qemuDomainObjPrivatePtr priv = vm->privateData;
569
if (priv->gotShutdown) {
570
VIR_DEBUG("Ignoring RESUME event after SHUTDOWN");
574
VIR_DEBUG("Transitioned guest %s out of paused into resumed state",
577
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
578
VIR_DOMAIN_RUNNING_UNPAUSED);
579
event = virDomainEventNewFromObj(vm,
580
VIR_DOMAIN_EVENT_RESUMED,
581
VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
583
VIR_DEBUG("Using lock state '%s' on resume event", NULLSTR(priv->lockState));
584
if (virDomainLockProcessResume(driver->lockManager, vm,
585
priv->lockState) < 0) {
586
/* Don't free priv->lockState on error, because we need
587
* to make sure we have state still present if the user
588
* tries to resume again
592
VIR_FREE(priv->lockState);
594
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
595
VIR_WARN("Unable to save status on vm %s after state change",
601
virDomainObjUnlock(vm);
604
qemuDriverLock(driver);
605
qemuDomainEventQueue(driver, event);
606
qemuDriverUnlock(driver);
559
614
qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
560
615
virDomainObjPtr vm,
561
616
long long offset)
857
912
.diskSecretLookup = qemuProcessFindVolumeQcowPassphrase,
858
913
.domainShutdown = qemuProcessHandleShutdown,
859
914
.domainStop = qemuProcessHandleStop,
915
.domainResume = qemuProcessHandleResume,
860
916
.domainReset = qemuProcessHandleReset,
861
917
.domainRTCChange = qemuProcessHandleRTCChange,
862
918
.domainWatchdog = qemuProcessHandleWatchdog,