提交 99486799 编写于 作者: J Jim Fehlig

libxl: MigrateConfirm: Dont unlock virDomainObj in helper function

The libxlDomainMigrateConfirm3Params API locks and ref counts the associated
virDomainObj but relies on the helper function libxlDomainMigrationConfirm
to unlock the object. Unref'ing the object is not done in either function.
libxlDomainMigrationConfirm is also used by libxlDomainMigratePerform3Params
for p2p migration, but in that case the lock/ref and unref/unlock are
properly handled in the API entry point.

Remove the unlock from libxlDomainMigrationConfirm and adjust
libxlDomainMigrateConfirm3Params to properly unref/unlock the virDomainObj
on success and error paths.
Signed-off-by: NJim Fehlig <jfehlig@suse.com>
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
上级 64370c4b
...@@ -6172,6 +6172,7 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain, ...@@ -6172,6 +6172,7 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain,
{ {
libxlDriverPrivatePtr driver = domain->conn->privateData; libxlDriverPrivatePtr driver = domain->conn->privateData;
virDomainObjPtr vm = NULL; virDomainObjPtr vm = NULL;
int ret = -1;
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
virReportUnsupportedError(); virReportUnsupportedError();
...@@ -6185,12 +6186,14 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain, ...@@ -6185,12 +6186,14 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain,
if (!(vm = libxlDomObjFromDomain(domain))) if (!(vm = libxlDomObjFromDomain(domain)))
return -1; return -1;
if (virDomainMigrateConfirm3ParamsEnsureACL(domain->conn, vm->def) < 0) { if (virDomainMigrateConfirm3ParamsEnsureACL(domain->conn, vm->def) < 0)
virObjectUnlock(vm); goto cleanup;
return -1;
}
return libxlDomainMigrationConfirm(driver, vm, flags, cancelled); ret = libxlDomainMigrationConfirm(driver, vm, flags, cancelled);
cleanup:
virDomainObjEndAPI(&vm);
return ret;
} }
static int libxlNodeGetSecurityModel(virConnectPtr conn, static int libxlNodeGetSecurityModel(virConnectPtr conn,
......
...@@ -1392,7 +1392,8 @@ libxlDomainMigrationConfirm(libxlDriverPrivatePtr driver, ...@@ -1392,7 +1392,8 @@ libxlDomainMigrationConfirm(libxlDriverPrivatePtr driver,
if (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE)) { if (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE)) {
virDomainObjListRemove(driver->domains, vm); virDomainObjListRemove(driver->domains, vm);
vm = NULL; /* Caller passed a locked vm and expects the same on return */
virObjectLock(vm);
} }
ret = 0; ret = 0;
...@@ -1400,8 +1401,6 @@ libxlDomainMigrationConfirm(libxlDriverPrivatePtr driver, ...@@ -1400,8 +1401,6 @@ libxlDomainMigrationConfirm(libxlDriverPrivatePtr driver,
cleanup: cleanup:
if (event) if (event)
libxlDomainEventQueue(driver, event); libxlDomainEventQueue(driver, event);
if (vm)
virObjectUnlock(vm);
virObjectUnref(cfg); virObjectUnref(cfg);
return ret; return ret;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册