提交 1d4d4f3b 编写于 作者: D Daniel P. Berrange

Fixed crash when cleaning up VMs

上级 f3df2295
Tue Jul 24 10:24:11 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_driver.c: Fixed crash when cleaning up after failed
attempt to start a VM.
Tue Jul 24 10:20:11 EST 2007 Daniel P. Berrange <berrange@redhat.com> Tue Jul 24 10:20:11 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* qemud/remote.c: Always immediately free virDomainPtr objects * qemud/remote.c: Always immediately free virDomainPtr objects
......
...@@ -92,9 +92,9 @@ static int qemudStartVMDaemon(virConnectPtr conn, ...@@ -92,9 +92,9 @@ static int qemudStartVMDaemon(virConnectPtr conn,
struct qemud_driver *driver, struct qemud_driver *driver,
struct qemud_vm *vm); struct qemud_vm *vm);
static int qemudShutdownVMDaemon(virConnectPtr conn, static void qemudShutdownVMDaemon(virConnectPtr conn,
struct qemud_driver *driver, struct qemud_driver *driver,
struct qemud_vm *vm); struct qemud_vm *vm);
static int qemudStartNetworkDaemon(virConnectPtr conn, static int qemudStartNetworkDaemon(virConnectPtr conn,
struct qemud_driver *driver, struct qemud_driver *driver,
...@@ -277,6 +277,8 @@ qemudShutdown(void) { ...@@ -277,6 +277,8 @@ qemudShutdown(void) {
struct qemud_vm *next = vm->next; struct qemud_vm *next = vm->next;
if (qemudIsActiveVM(vm)) if (qemudIsActiveVM(vm))
qemudShutdownVMDaemon(NULL, qemu_driver, vm); qemudShutdownVMDaemon(NULL, qemu_driver, vm);
if (!vm->configFile[0])
qemudRemoveInactiveVM(qemu_driver, vm);
vm = next; vm = next;
} }
...@@ -729,10 +731,10 @@ static int qemudVMData(struct qemud_driver *driver ATTRIBUTE_UNUSED, ...@@ -729,10 +731,10 @@ static int qemudVMData(struct qemud_driver *driver ATTRIBUTE_UNUSED,
} }
static int qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
struct qemud_driver *driver, struct qemud_vm *vm) { struct qemud_driver *driver, struct qemud_vm *vm) {
if (!qemudIsActiveVM(vm)) if (!qemudIsActiveVM(vm))
return 0; return;
qemudLog(QEMUD_INFO, "Shutting down VM '%s'", vm->def->name); qemudLog(QEMUD_INFO, "Shutting down VM '%s'", vm->def->name);
...@@ -774,24 +776,22 @@ static int qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -774,24 +776,22 @@ static int qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
driver->nactivevms--; driver->nactivevms--;
driver->ninactivevms++; driver->ninactivevms++;
if (!vm->configFile[0])
qemudRemoveInactiveVM(driver, vm);
return 0;
} }
static int qemudDispatchVMLog(struct qemud_driver *driver, struct qemud_vm *vm, int fd) { static int qemudDispatchVMLog(struct qemud_driver *driver, struct qemud_vm *vm, int fd) {
if (qemudVMData(driver, vm, fd) < 0) if (qemudVMData(driver, vm, fd) < 0) {
if (qemudShutdownVMDaemon(NULL, driver, vm) < 0) qemudShutdownVMDaemon(NULL, driver, vm);
return -1; if (!vm->configFile[0])
qemudRemoveInactiveVM(driver, vm);
}
return 0; return 0;
} }
static int qemudDispatchVMFailure(struct qemud_driver *driver, struct qemud_vm *vm, static int qemudDispatchVMFailure(struct qemud_driver *driver, struct qemud_vm *vm,
int fd ATTRIBUTE_UNUSED) { int fd ATTRIBUTE_UNUSED) {
if (qemudShutdownVMDaemon(NULL, driver, vm) < 0) qemudShutdownVMDaemon(NULL, driver, vm);
return -1; if (!vm->configFile[0])
qemudRemoveInactiveVM(driver, vm);
return 0; return 0;
} }
...@@ -1844,7 +1844,6 @@ static int qemudDomainResume(virDomainPtr dom) { ...@@ -1844,7 +1844,6 @@ static int qemudDomainResume(virDomainPtr dom) {
static int qemudDomainDestroy(virDomainPtr dom) { static int qemudDomainDestroy(virDomainPtr dom) {
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData; struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
struct qemud_vm *vm = qemudFindVMByID(driver, dom->id); struct qemud_vm *vm = qemudFindVMByID(driver, dom->id);
int ret;
if (!vm) { if (!vm) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN, qemudReportError(dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN,
...@@ -1852,9 +1851,11 @@ static int qemudDomainDestroy(virDomainPtr dom) { ...@@ -1852,9 +1851,11 @@ static int qemudDomainDestroy(virDomainPtr dom) {
return -1; return -1;
} }
ret = qemudShutdownVMDaemon(dom->conn, driver, vm); qemudShutdownVMDaemon(dom->conn, driver, vm);
if (!vm->configFile[0])
qemudRemoveInactiveVM(driver, vm);
virFreeDomain(dom->conn, dom); virFreeDomain(dom->conn, dom);
return ret; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册