mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-05 13:17:51 +03:00
libxl: MigrateBegin: Dont call EndAPI in helper function
The libxlDomainMigrateBegin3Params API locks and ref counts the associated virDomainObj but relies on the helper function libxlDomainMigrationBegin to unref/unlock the object. libxlDomainMigrationBegin 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. So p2p migrations suffer a double unref/unlock in the Perform API. Remove the unref/unlock (virDomainObjEndAPI) from libxlDomainMigrationBegin and adjust libxlDomainMigrateBegin3Params to properly unref/unlock the virDomainObj on success and error paths. Signed-off-by: Jim Fehlig <jfehlig@suse.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
06a7a5db66
commit
64370c4b81
@ -5887,6 +5887,7 @@ libxlDomainMigrateBegin3Params(virDomainPtr domain,
|
||||
{
|
||||
const char *xmlin = NULL;
|
||||
virDomainObjPtr vm = NULL;
|
||||
char *xmlout = NULL;
|
||||
|
||||
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
|
||||
virReportUnsupportedError();
|
||||
@ -5906,25 +5907,26 @@ libxlDomainMigrateBegin3Params(virDomainPtr domain,
|
||||
return NULL;
|
||||
|
||||
if (STREQ_NULLABLE(vm->def->name, "Domain-0")) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Domain-0 cannot be migrated"));
|
||||
return NULL;
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Domain-0 cannot be migrated"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (virDomainMigrateBegin3ParamsEnsureACL(domain->conn, vm->def) < 0) {
|
||||
virObjectUnlock(vm);
|
||||
return NULL;
|
||||
}
|
||||
if (virDomainMigrateBegin3ParamsEnsureACL(domain->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
"%s", _("domain is not running"));
|
||||
virObjectUnlock(vm);
|
||||
return NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
return libxlDomainMigrationBegin(domain->conn, vm, xmlin,
|
||||
cookieout, cookieoutlen);
|
||||
xmlout = libxlDomainMigrationBegin(domain->conn, vm, xmlin,
|
||||
cookieout, cookieoutlen);
|
||||
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
return xmlout;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -443,7 +443,6 @@ libxlDomainMigrationBegin(virConnectPtr conn,
|
||||
|
||||
cleanup:
|
||||
libxlMigrationCookieFree(mig);
|
||||
virDomainObjEndAPI(&vm);
|
||||
virDomainDefFree(tmpdef);
|
||||
virObjectUnref(cfg);
|
||||
return xml;
|
||||
|
Loading…
Reference in New Issue
Block a user