[libvirt] [PATCH] qemu: Unref domain on error of opening qemu monitor

The domain refed will be left unrefed when there is error when opening qemu monitor, so unref it. --- src/qemu/qemu_driver.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 25695df..4bcfb27 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1385,7 +1385,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) (driver->securityDriver,vm) < 0) { VIR_ERROR(_("Failed to set security context for monitor for %s"), vm->def->name); - goto error; + return ret; } /* Hold an extra reference because we can't allow 'vm' to be @@ -1420,8 +1420,10 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) qemuDomainObjExitMonitorWithDriver(driver, vm); error: - if (ret < 0) + if (ret < 0) { qemuMonitorClose(priv->mon); + virDomainObjUnref(vm); + } return ret; } -- 1.7.3

于 2010年10月28日 11:06, Hu Tao 写道:
The domain refed will be left unrefed when there is error when opening qemu monitor, so unref it. --- src/qemu/qemu_driver.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 25695df..4bcfb27 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1385,7 +1385,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) (driver->securityDriver,vm)< 0) { VIR_ERROR(_("Failed to set security context for monitor for %s"), vm->def->name); - goto error; + return ret;
how could you unref the domain ref? it returns here.. :-) it even will give up closing priv->mon.
}
/* Hold an extra reference because we can't allow 'vm' to be @@ -1420,8 +1420,10 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) qemuDomainObjExitMonitorWithDriver(driver, vm);
error: - if (ret< 0) + if (ret< 0) { qemuMonitorClose(priv->mon); + virDomainObjUnref(vm); + }
return ret; }

On Thu, Oct 28, 2010 at 11:42:12AM +0800, Osier wrote:
于 2010年10月28日 11:06, Hu Tao 写道:
The domain refed will be left unrefed when there is error when opening qemu monitor, so unref it. --- src/qemu/qemu_driver.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 25695df..4bcfb27 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1385,7 +1385,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) (driver->securityDriver,vm)< 0) { VIR_ERROR(_("Failed to set security context for monitor for %s"), vm->def->name); - goto error; + return ret;
how could you unref the domain ref? it returns here.. :-) it even will give up closing priv->mon.
1. The domain is not refed yet here, so we can't unref it later. 2. The monitor is not opened yet here, so it is wrong to close it later. -- Thanks, Hu Tao

于 2010年10月28日 11:50, Hu Tao 写道:
On Thu, Oct 28, 2010 at 11:42:12AM +0800, Osier wrote:
于 2010年10月28日 11:06, Hu Tao 写道:
The domain refed will be left unrefed when there is error when opening qemu monitor, so unref it. --- src/qemu/qemu_driver.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 25695df..4bcfb27 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1385,7 +1385,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) (driver->securityDriver,vm)< 0) { VIR_ERROR(_("Failed to set security context for monitor for %s"), vm->def->name); - goto error; + return ret;
how could you unref the domain ref? it returns here.. :-) it even will give up closing priv->mon.
1. The domain is not refed yet here, so we can't unref it later. 2. The monitor is not opened yet here, so it is wrong to close it later.
ah, right, just looked the entire codes.. :-) - Osier

On Thu, Oct 28, 2010 at 11:06:03AM +0800, Hu Tao wrote:
The domain refed will be left unrefed when there is error when opening qemu monitor, so unref it.
No, it won't, there is an explicit unref on failure: priv->mon = qemuMonitorOpen(vm, priv->monConfig, priv->monJSON, &monitorCallbacks); if (priv->mon == NULL) virDomainObjUnref(vm); Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (3)
-
Daniel P. Berrange
-
Hu Tao
-
Osier