1
0
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:
Jim Fehlig 2018-03-12 11:51:43 -06:00
parent 06a7a5db66
commit 64370c4b81
2 changed files with 13 additions and 12 deletions

View File

@ -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

View File

@ -443,7 +443,6 @@ libxlDomainMigrationBegin(virConnectPtr conn,
cleanup:
libxlMigrationCookieFree(mig);
virDomainObjEndAPI(&vm);
virDomainDefFree(tmpdef);
virObjectUnref(cfg);
return xml;