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. -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list