On Wed, 2016-07-27 at 17:40 +0100, Joao Martins wrote:
> This commit also factorizes code between the error and normal
ends.
Also noticed in the rest of the patches, but I think you forgot to include
the SoB tag (Signed-off-by).
I never include it and it's not mandatory here in the libvirt community.
> ---
> src/libxl/libxl_driver.c | 28 ++++++++++++++++------------
> 1 file changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index cb501cf..5008c00 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -373,11 +373,13 @@ libxlReconnectDomain(virDomainObjPtr vm,
> uint8_t *data = NULL;
> virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
> unsigned int hostdev_flags = VIR_HOSTDEV_SP_PCI;
> + int ret = -1;
>
> #ifdef LIBXL_HAVE_PVUSB
> hostdev_flags |= VIR_HOSTDEV_SP_USB;
> #endif
>
> + virObjectRef(vm);
> virObjectLock(vm);
>
> libxl_dominfo_init(&d_info);
> @@ -385,18 +387,18 @@ libxlReconnectDomain(virDomainObjPtr vm,
> /* Does domain still exist? */
> rc = libxl_domain_info(cfg->ctx, &d_info, vm->def->id);
> if (rc == ERROR_INVAL) {
> - goto out;
> + goto error;
> } else if (rc != 0) {
> VIR_DEBUG("libxl_domain_info failed (code %d), ignoring domain
%d",
> rc, vm->def->id);
> - goto out;
> + goto error;
> }
>
> /* Is this a domain that was under libvirt control? */
> if (libxl_userdata_retrieve(cfg->ctx, vm->def->id,
> "libvirt-xml", &data, &len)) {
> VIR_DEBUG("libxl_userdata_retrieve failed, ignoring domain %d",
vm->def->id);
> - goto out;
> + goto error;
> }
>
> /* Update domid in case it changed (e.g. reboot) while we were gone? */
> @@ -405,7 +407,7 @@ libxlReconnectDomain(virDomainObjPtr vm,
> /* Update hostdev state */
> if (virHostdevUpdateActiveDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
> vm->def, hostdev_flags) < 0)
> - goto out;
> + goto error;
>
> if (virAtomicIntInc(&driver->nactive) == 1 &&
driver->inhibitCallback)
> driver->inhibitCallback(true, driver->inhibitOpaque);
> @@ -413,21 +415,23 @@ libxlReconnectDomain(virDomainObjPtr vm,
> /* Enable domain death events */
> libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0,
&priv->deathW);
After this patch it will always returns an error. Although
patch 3 of this series does add the "ret = 0" here. I think it should a part of
this
patch.
Indeed, I failed splitting the change correctly, nice catch!
--
Cedric
>
> + cleanup:
> libxl_dominfo_dispose(&d_info);
> virObjectUnlock(vm);
> + virObjectUnref(vm);
> virObjectUnref(cfg);
> - return 0;
> + return ret;
>
> - out:
> - libxl_dominfo_dispose(&d_info);
> + error:
> libxlDomainCleanup(driver, vm);
> - if (!vm->persistent)
> + if (!vm->persistent) {
> virDomainObjListRemoveLocked(driver->domains, vm);
> - else
> - virObjectUnlock(vm);
> - virObjectUnref(cfg);
>
> - return -1;
> + /* virDomainObjListRemoveLocked leaves the object unlocked,
> + * lock it again to factorize more code. */
> + virObjectLock(vm);
> + }
> + goto cleanup;
> }
>
> static void
>
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list