
On Thu, 2009-09-24 at 16:00 +0100, Daniel P. Berrange wrote:
* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h: Add a new qemuMonitorStopCPUs() API * src/qemu/qemu_driver.c: Replace direct monitor commands for 'stop' with qemuMonitorStopCPUs() --- src/qemu/qemu_driver.c | 28 ++++------------------------ src/qemu/qemu_monitor_text.c | 13 +++++++++++++ src/qemu/qemu_monitor_text.h | 1 + 3 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1717cbd..5ebd4b7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2749,7 +2749,6 @@ cleanup:
static int qemudDomainSuspend(virDomainPtr dom) { struct qemud_driver *driver = dom->conn->privateData; - char *info; virDomainObjPtr vm; int ret = -1; virDomainEventPtr event = NULL; @@ -2770,17 +2769,12 @@ static int qemudDomainSuspend(virDomainPtr dom) { 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; @@ -3365,13 +3359,9 @@ static int qemudDomainSave(virDomainPtr dom, /* 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);
Shouldn't be free-ing info here ...
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 3c12073..ec30e72 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -438,6 +438,19 @@ qemuMonitorStartCPUs(virConnectPtr conn, }
+int +qemuMonitorStopCPUs(const virDomainObjPtr vm) { + char *info; + + if (qemudMonitorCommand(vm, "stop", &info) < 0) { + qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("cannot stop CPU execution")); + return -1; + } + VIR_FREE(info);
Lost debugging of replies here, but you re-add it again in 26/27 ACK Cheers, Mark.