[libvirt] [PATCH 5/6] libxl: Fix removing non-persistent domain after save
Daniel Veillard
veillard at redhat.com
Fri Jan 25 16:41:15 UTC 2013
On Mon, Jan 21, 2013 at 12:22:23PM -0700, Jim Fehlig wrote:
> libxlDoDomainSave() was removing non-persistent domains, but
> required callers to have the virDomainObj locked. Callers could
> potentially unlock an already freed virDomainObj. Move this
> logic to the callers of libxlDoDomainSave().
> ---
> src/libxl/libxl_driver.c | 26 ++++++++++++++++++--------
> 1 file changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 08dffd6..7484b83 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -2118,12 +2118,6 @@ libxlDoDomainSave(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
> }
>
> vm->hasManagedSave = true;
> -
> - if (!vm->persistent) {
> - virDomainRemoveInactive(&driver->domains, vm);
> - vm = NULL;
> - }
> -
> ret = 0;
>
> cleanup:
> @@ -2166,7 +2160,15 @@ libxlDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml,
> goto cleanup;
> }
>
> - ret = libxlDoDomainSave(driver, vm, to);
> + if (libxlDoDomainSave(driver, vm, to) < 0)
> + goto cleanup;
> +
> + if (!vm->persistent) {
> + virDomainRemoveInactive(&driver->domains, vm);
> + vm = NULL;
> + }
> +
> + ret = 0;
>
> cleanup:
> if (vm)
> @@ -2365,7 +2367,15 @@ libxlDomainManagedSave(virDomainPtr dom, unsigned int flags)
>
> VIR_INFO("Saving state to %s", name);
>
> - ret = libxlDoDomainSave(driver, vm, name);
> + if (libxlDoDomainSave(driver, vm, name) < 0)
> + goto cleanup;
> +
> + if (!vm->persistent) {
> + virDomainRemoveInactive(&driver->domains, vm);
> + vm = NULL;
> + }
> +
> + ret = 0;
>
> cleanup:
> if (vm)
ACK,
Daniel
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard at redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list