[libvirt] [PATCH V2 3/3] libxl: acquire a job when receiving a migrating domain

Michal Privoznik mprivozn at redhat.com
Thu Aug 20 00:15:59 UTC 2015


On 07.08.2015 19:53, Jim Fehlig wrote:
> Commit f86ae403 moved acquiring a job from libxlDomainStart()
> to its callers. One spot missed was in libxlDoMigrateReceive().
> Acquire a job in libxlDoMigrateReceive() before calling
> libxlDomainStart().
> 
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
>  src/libxl/libxl_migration.c | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c
> index a407ad9..8db3aea 100644
> --- a/src/libxl/libxl_migration.c
> +++ b/src/libxl/libxl_migration.c
> @@ -95,17 +95,20 @@ libxlDoMigrateReceive(void *opaque)
>      int recvfd = args->recvfd;
>      size_t i;
>      int ret;
> +    bool remove_dom = 0;
> +
> +    virObjectLock(vm);
> +    if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0)
> +        goto cleanup;
>  
>      /*
>       * Always start the domain paused.  If needed, unpause in the
>       * finish phase, after transfer of the domain is complete.
>       */
> -    virObjectLock(vm);
>      ret = libxlDomainStart(driver, vm, true, recvfd);
> -    virObjectUnlock(vm);
>  
>      if (ret < 0 && !vm->persistent)
> -        virDomainObjListRemove(driver->domains, vm);
> +        remove_dom = true;
>  
>      /* Remove all listen socks from event handler, and close them. */
>      for (i = 0; i < nsocks; i++) {
> @@ -117,6 +120,17 @@ libxlDoMigrateReceive(void *opaque)
>      args->nsocks = 0;
>      VIR_FORCE_CLOSE(recvfd);
>      virObjectUnref(args);
> +
> +    if (!libxlDomainObjEndJob(driver, vm))
> +        vm = NULL;
> +
> + cleanup:
> +    if (remove_dom && vm) {
> +        virDomainObjListRemove(driver->domains, vm);
> +        vm = NULL;
> +    }
> +    if (vm)
> +        virObjectUnlock(vm);
>  }
>  
>  
> 

ACK

Michal




More information about the libvir-list mailing list