diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 793e8dbce1..db8e0d2590 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2841,7 +2841,6 @@ cleanup: static int qemudDomainShutdown(virDomainPtr dom) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; - char* info; int ret = -1; qemuDriverLock(driver); @@ -2862,12 +2861,9 @@ static int qemudDomainShutdown(virDomainPtr dom) { goto cleanup; } - if (qemudMonitorCommand(vm, "system_powerdown", &info) < 0) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("shutdown operation failed")); + if (qemuMonitorSystemPowerdown(vm) < 0) goto cleanup; - } - VIR_FREE(info); + ret = 0; cleanup: diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 2a301e5442..47843e81d0 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -451,6 +451,20 @@ qemuMonitorStopCPUs(const virDomainObjPtr vm) { return 0; } + +int qemuMonitorSystemPowerdown(const virDomainObjPtr vm) { + char *info; + + if (qemudMonitorCommand(vm, "system_powerdown", &info) < 0) { + qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("system shutdown operation failed")); + return -1; + } + VIR_FREE(info); + return 0; +} + + int qemuMonitorGetCPUInfo(const virDomainObjPtr vm, int **pids) { diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 3504e8d316..80c21d8f03 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -69,6 +69,8 @@ int qemuMonitorStartCPUs(virConnectPtr conn, const virDomainObjPtr vm); int qemuMonitorStopCPUs(const virDomainObjPtr vm); +int qemuMonitorSystemPowerdown(const virDomainObjPtr vm); + int qemuMonitorGetCPUInfo(const virDomainObjPtr vm, int **pids);