[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