static int qemudDomainSuspend(virDomainPtr dom) {
struct qemud_driver *driver = dom->conn->privateData;
- char *info;
virDomainObjPtr vm;
int ret = -1;
virDomainEventPtr event = NULL;
goto cleanup;
}
if (vm->state != VIR_DOMAIN_PAUSED) {
- if (qemudMonitorCommand(vm, "stop", &info) < 0) {
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
- "%s", _("suspend operation failed"));
+ if (qemuMonitorStopCPUs(vm) < 0)
goto cleanup;
- }
vm->state = VIR_DOMAIN_PAUSED;
- qemudDebug("Reply %s", info);
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_SUSPENDED,
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
- VIR_FREE(info);
}
if (virDomainSaveStatus(dom->conn, driver->stateDir, vm) < 0)
goto cleanup;
/* Pause */
if (vm->state == VIR_DOMAIN_RUNNING) {
header.was_running = 1;
- if (qemudMonitorCommand(vm, "stop", &info) < 0) {
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
- "%s", _("suspend operation failed"));
+ if (qemuMonitorStopCPUs(vm) < 0)
goto cleanup;
- }
vm->state = VIR_DOMAIN_PAUSED;
- qemudDebug("Reply %s", info);
- VIR_FREE(info);
}
/* Get XML for the domain */
/* Pause domain for non-live dump */
if (vm->state == VIR_DOMAIN_RUNNING) {
- if (qemudMonitorCommand (vm, "stop", &info) < 0) {
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
- "%s", _("suspending before dump failed"));
+ if (qemuMonitorStopCPUs(vm) < 0)
goto cleanup;
- }
- DEBUG ("%s: stop reply: %s", vm->def->name, info);
- VIR_FREE(info);
paused = 1;
}
if (!(flags & VIR_MIGRATE_LIVE)) {
/* Pause domain for non-live migration */
- if (qemudMonitorCommand (vm, "stop", &info) < 0) {
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
- "%s", _("off-line migration specified, but suspend operation failed"));
+ if (qemuMonitorStopCPUs(vm) < 0)
goto cleanup;
- }
- DEBUG ("%s: stop reply: %s", vm->def->name, info);
- VIR_FREE(info);
paused = 1;
event = virDomainEventNewFromObj(vm,