diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 604b94a006..014f6aceca 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -861,10 +861,14 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, virHostdevReAttachDomainDevices(hostdev_mgr, LIBXL_DRIVER_INTERNAL_NAME, vm->def, hostdev_flags); - VIR_FREE(priv->lockState); - if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) - VIR_WARN("Unable to release lease on %s", vm->def->name); - VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + if (priv->lockProcessRunning) { + VIR_FREE(priv->lockState); + if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) + VIR_WARN("Unable to release lease on %s", vm->def->name); + else + priv->lockProcessRunning = false; + VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + } libxlLoggerCloseFile(cfg->logger, vm->def->id); vm->def->id = -1; @@ -1426,6 +1430,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, priv->lockState) < 0) goto destroy_dom; VIR_FREE(priv->lockState); + priv->lockProcessRunning = true; /* Always enable domain death events */ if (libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0, &priv->deathW)) diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 00682546e0..5fb76bd303 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -68,6 +68,7 @@ struct _libxlDomainObjPrivate { virThreadPtr migrationDstReceiveThr; unsigned short migrationPort; char *lockState; + bool lockProcessRunning; struct libxlDomainJobObj job; diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c index 631f67930d..a5a9df98ad 100644 --- a/src/libxl/libxl_migration.c +++ b/src/libxl/libxl_migration.c @@ -1242,9 +1242,12 @@ libxlDomainMigrationSrcPerform(libxlDriverPrivatePtr driver, virObjectLock(vm); if (ret == 0) { - if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) + if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) == 0) { + priv->lockProcessRunning = false; + VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + } else { VIR_WARN("Unable to release lease on %s", vm->def->name); - VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + } } else { /* * Confirm phase will not be executed if perform fails. End the @@ -1377,6 +1380,7 @@ libxlDomainMigrationSrcConfirm(libxlDriverPrivatePtr driver, "xen:///system", vm, priv->lockState); + priv->lockProcessRunning = true; if (libxl_domain_resume(cfg->ctx, vm->def->id, 1, 0) == 0) { ret = 0; } else {