[libvirt] [PATCH 2/3] libxl: fix resource leaks in libxlDomainStart error paths
Chun Yan Liu
cyliu at suse.com
Tue Mar 29 01:36:07 UTC 2016
Reviewed-by: Chunyan Liu <cyliu at suse.com>
>>> On 3/29/2016 at 08:54 AM, in message
<1459212889-5490-3-git-send-email-jfehlig at suse.com>, Jim Fehlig
<jfehlig at suse.com> wrote:
> From: Chunyan Liu <cyliu at suse.com>
>
> libxlDomainStart allocates and reserves resources that were not
> being released in error paths. libxlDomainCleanup already handles
> the job of releasing resources, and libxlDomainStart should call
> it when encountering a failure.
>
> Change the error handling logic to call libxlDomainCleanup on
> failure. This includes acquiring the lease sooner and allowing
> it to be released in libxlDomainCleanup on failure, similar to
> the way other resources are reclaimed. With the lease now
> released in libxlDomainCleanup, the release_dom label can be
> renamed to cleanup_dom to better reflect its changed semantics.
>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
> src/libxl/libxl_domain.c | 28 ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index ead3d09..068bfb6 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -1036,17 +1036,6 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> vm, true) < 0)
> goto cleanup;
>
> - if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
> - cfg->ctx, &d_config) < 0)
> - goto cleanup;
> -
> - if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, &d_config) < 0)
> - goto cleanup;
> -
> - if (virHostdevPrepareDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
> - vm->def, VIR_HOSTDEV_SP_PCI) < 0)
> - goto cleanup;
> -
> if (virDomainLockProcessStart(driver->lockManager,
> "xen:///system",
> vm,
> @@ -1061,6 +1050,17 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> goto cleanup;
> VIR_FREE(priv->lockState);
>
> + if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
> + cfg->ctx, &d_config) < 0)
> + goto cleanup_dom;
> +
> + if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, &d_config) < 0)
> + goto cleanup_dom;
> +
> + if (virHostdevPrepareDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
> + vm->def, VIR_HOSTDEV_SP_PCI) < 0)
> + goto cleanup_dom;
> +
> /* Unlock virDomainObj while creating the domain */
> virObjectUnlock(vm);
>
> @@ -1091,7 +1091,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("libxenlight failed to restore domain '%s'"),
> d_config.c_info.name);
> - goto release_dom;
> + goto cleanup_dom;
> }
>
> /*
> @@ -1152,8 +1152,8 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> vm->def->id = -1;
> virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF,
> VIR_DOMAIN_SHUTOFF_FAILED);
>
> - release_dom:
> - virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState);
> + cleanup_dom:
> + libxlDomainCleanup(driver, vm);
>
> cleanup:
> libxl_domain_config_dispose(&d_config);
More information about the libvir-list
mailing list