mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
virDomainObjListAdd: Transfer definition ownership
Upon successful return from virDomainObjListAdd() the virDomainObj is the owner of secret definition. To make this ownership transfer even more visible, lets pass the definition as a double pointer and use g_steal_pointer(). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
900fb1a315
commit
6bcd263011
@ -533,11 +533,10 @@ bhyveDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
|
||||
if (bhyveDomainAssignAddresses(def, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(privconn->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(privconn->domains, &def,
|
||||
privconn->xmlopt,
|
||||
0, &oldDef)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
vm->persistent = 1;
|
||||
|
||||
if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
|
||||
@ -915,12 +914,11 @@ bhyveDomainCreateXML(virConnectPtr conn,
|
||||
if (bhyveDomainAssignAddresses(def, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(privconn->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(privconn->domains, &def,
|
||||
privconn->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (virBhyveProcessStart(conn, vm,
|
||||
VIR_DOMAIN_RUNNING_BOOTED,
|
||||
|
@ -237,15 +237,13 @@ chDomainCreateXML(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains,
|
||||
vmdef,
|
||||
&vmdef,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
|
||||
vmdef = NULL;
|
||||
|
||||
if (virCHDomainObjBeginJob(vm, CH_JOB_MODIFY) < 0)
|
||||
goto cleanup;
|
||||
|
||||
@ -323,12 +321,11 @@ chDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
|
||||
if (virDomainDefineXMLFlagsEnsureACL(conn, vmdef) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
|
||||
driver->xmlopt,
|
||||
0, NULL)))
|
||||
goto cleanup;
|
||||
|
||||
vmdef = NULL;
|
||||
vm->persistent = 1;
|
||||
|
||||
dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id);
|
||||
|
@ -3865,7 +3865,7 @@ virDomainDefNew(virDomainXMLOption *xmlopt)
|
||||
|
||||
|
||||
void virDomainObjAssignDef(virDomainObj *domain,
|
||||
virDomainDef *def,
|
||||
virDomainDef **def,
|
||||
bool live,
|
||||
virDomainDef **oldDef)
|
||||
{
|
||||
@ -3876,7 +3876,7 @@ void virDomainObjAssignDef(virDomainObj *domain,
|
||||
*oldDef = domain->newDef;
|
||||
else
|
||||
virDomainDefFree(domain->newDef);
|
||||
domain->newDef = def;
|
||||
domain->newDef = g_steal_pointer(def);
|
||||
} else {
|
||||
if (live) {
|
||||
/* save current configuration to be restored on domain shutdown */
|
||||
@ -3884,13 +3884,13 @@ void virDomainObjAssignDef(virDomainObj *domain,
|
||||
domain->newDef = domain->def;
|
||||
else
|
||||
virDomainDefFree(domain->def);
|
||||
domain->def = def;
|
||||
domain->def = g_steal_pointer(def);
|
||||
} else {
|
||||
if (oldDef)
|
||||
*oldDef = domain->def;
|
||||
else
|
||||
virDomainDefFree(domain->def);
|
||||
domain->def = def;
|
||||
domain->def = g_steal_pointer(def);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3388,7 +3388,7 @@ virDomainNetDefNew(virDomainXMLOption *xmlopt);
|
||||
virDomainDef *virDomainDefNew(virDomainXMLOption *xmlopt);
|
||||
|
||||
void virDomainObjAssignDef(virDomainObj *domain,
|
||||
virDomainDef *def,
|
||||
virDomainDef **def,
|
||||
bool live,
|
||||
virDomainDef **oldDef);
|
||||
int virDomainObjSetDefTransient(virDomainXMLOption *xmlopt,
|
||||
|
@ -257,13 +257,17 @@ virDomainObjListAddObjLocked(virDomainObjList *doms,
|
||||
* the @def being added is assumed to represent a
|
||||
* live config, not a future inactive config
|
||||
*
|
||||
* Upon successful return the virDomain object is the owner of
|
||||
* @def and callers should use @vm->def if they need to access
|
||||
* the definition as @def is set to NULL.
|
||||
*
|
||||
* The returned @vm from this function will be locked and ref
|
||||
* counted. The caller is expected to use virDomainObjEndAPI
|
||||
* when it completes usage.
|
||||
*/
|
||||
static virDomainObj *
|
||||
virDomainObjListAddLocked(virDomainObjList *doms,
|
||||
virDomainDef *def,
|
||||
virDomainDef **def,
|
||||
virDomainXMLOption *xmlopt,
|
||||
unsigned int flags,
|
||||
virDomainDef **oldDef)
|
||||
@ -275,13 +279,13 @@ virDomainObjListAddLocked(virDomainObjList *doms,
|
||||
*oldDef = NULL;
|
||||
|
||||
/* See if a VM with matching UUID already exists */
|
||||
if ((vm = virDomainObjListFindByUUIDLocked(doms, def->uuid))) {
|
||||
if ((vm = virDomainObjListFindByUUIDLocked(doms, (*def)->uuid))) {
|
||||
if (vm->removing) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("domain '%s' is already being removed"),
|
||||
vm->def->name);
|
||||
goto error;
|
||||
} else if (STRNEQ(vm->def->name, def->name)) {
|
||||
} else if (STRNEQ(vm->def->name, (*def)->name)) {
|
||||
/* UUID matches, but if names don't match, refuse it */
|
||||
virUUIDFormat(vm->def->uuid, uuidstr);
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
@ -312,20 +316,20 @@ virDomainObjListAddLocked(virDomainObjList *doms,
|
||||
oldDef);
|
||||
} else {
|
||||
/* UUID does not match, but if a name matches, refuse it */
|
||||
if ((vm = virDomainObjListFindByNameLocked(doms, def->name))) {
|
||||
if ((vm = virDomainObjListFindByNameLocked(doms, (*def)->name))) {
|
||||
virUUIDFormat(vm->def->uuid, uuidstr);
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("domain '%s' already exists with uuid %s"),
|
||||
def->name, uuidstr);
|
||||
(*def)->name, uuidstr);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!(vm = virDomainObjNew(xmlopt)))
|
||||
goto error;
|
||||
vm->def = def;
|
||||
vm->def = g_steal_pointer(def);
|
||||
|
||||
if (virDomainObjListAddObjLocked(doms, vm) < 0) {
|
||||
vm->def = NULL;
|
||||
*def = g_steal_pointer(&vm->def);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@ -340,7 +344,7 @@ virDomainObjListAddLocked(virDomainObjList *doms,
|
||||
|
||||
virDomainObj *
|
||||
virDomainObjListAdd(virDomainObjList *doms,
|
||||
virDomainDef *def,
|
||||
virDomainDef **def,
|
||||
virDomainXMLOption *xmlopt,
|
||||
unsigned int flags,
|
||||
virDomainDef **oldDef)
|
||||
@ -498,7 +502,7 @@ virDomainObjListLoadConfig(virDomainObjList *doms,
|
||||
if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(dom = virDomainObjListAddLocked(doms, def, xmlopt, 0, &oldDef)))
|
||||
if (!(dom = virDomainObjListAddLocked(doms, &def, xmlopt, 0, &oldDef)))
|
||||
goto error;
|
||||
|
||||
dom->autostart = autostart;
|
||||
|
@ -40,7 +40,7 @@ enum {
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
|
||||
};
|
||||
virDomainObj *virDomainObjListAdd(virDomainObjList *doms,
|
||||
virDomainDef *def,
|
||||
virDomainDef **def,
|
||||
virDomainXMLOption *xmlopt,
|
||||
unsigned int flags,
|
||||
virDomainDef **oldDef);
|
||||
|
@ -1482,8 +1482,7 @@ libxlDomainStartNew(libxlDriverPrivate *driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
virDomainObjAssignDef(vm, def, true, NULL);
|
||||
def = NULL;
|
||||
virDomainObjAssignDef(vm, &def, true, NULL);
|
||||
|
||||
if (unlink(managed_save_path) < 0)
|
||||
VIR_WARN("Failed to remove the managed state %s",
|
||||
|
@ -595,13 +595,12 @@ libxlAddDom0(libxlDriverPrivate *driver)
|
||||
if (virUUIDParse("00000000-0000-0000-0000-000000000000", def->uuid) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
0,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
|
||||
def = NULL;
|
||||
vm->persistent = 1;
|
||||
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED);
|
||||
}
|
||||
@ -1028,13 +1027,12 @@ libxlDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
if (virDomainCreateXMLEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
|
||||
if (!vm->persistent)
|
||||
@ -1948,13 +1946,12 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
|
||||
if (virDomainRestoreFlagsEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
|
||||
if (!vm->persistent)
|
||||
@ -2826,12 +2823,11 @@ libxlDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
|
||||
if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
0,
|
||||
&oldDef)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
vm->persistent = 1;
|
||||
|
||||
@ -4143,10 +4139,8 @@ libxlDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
endjob:
|
||||
@ -4234,10 +4228,8 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
endjob:
|
||||
@ -4319,10 +4311,8 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG)) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
@ -548,13 +548,12 @@ libxlDomainMigrationDstPrepareTunnel3(virConnectPtr dconn,
|
||||
&mig, &xmlout, &taint_hook) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, *def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto error;
|
||||
*def = NULL;
|
||||
|
||||
/*
|
||||
* Unless an error is encountered in this function, the job will
|
||||
@ -658,13 +657,12 @@ libxlDomainMigrationDstPrepare(virConnectPtr dconn,
|
||||
&mig, &xmlout, &taint_hook) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, *def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto error;
|
||||
*def = NULL;
|
||||
|
||||
/*
|
||||
* Unless an error is encountered in this function, the job will
|
||||
|
@ -435,12 +435,11 @@ lxcDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
0, &oldDef)))
|
||||
goto cleanup;
|
||||
|
||||
def = NULL;
|
||||
vm->persistent = 1;
|
||||
|
||||
if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
|
||||
@ -1118,13 +1117,12 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) {
|
||||
if (!vm->persistent)
|
||||
@ -1917,8 +1915,7 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
|
||||
if (rc < 0)
|
||||
goto endjob;
|
||||
|
||||
virDomainObjAssignDef(vm, persistentDefCopy, false, NULL);
|
||||
persistentDefCopy = NULL;
|
||||
virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
@ -4368,10 +4365,8 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr dom,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
endjob:
|
||||
@ -4444,8 +4439,7 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr dom,
|
||||
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
|
||||
goto endjob;
|
||||
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
ret = 0;
|
||||
|
||||
endjob:
|
||||
@ -4537,10 +4531,8 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr dom,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
endjob:
|
||||
|
@ -527,7 +527,7 @@ int openvzLoadDomains(struct openvz_driver *driver)
|
||||
flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE;
|
||||
|
||||
if (!(dom = virDomainObjListAdd(driver->domains,
|
||||
def,
|
||||
&def,
|
||||
driver->xmlopt,
|
||||
flags,
|
||||
NULL)))
|
||||
@ -547,7 +547,6 @@ int openvzLoadDomains(struct openvz_driver *driver)
|
||||
|
||||
virDomainObjEndAPI(&dom);
|
||||
dom = NULL;
|
||||
def = NULL;
|
||||
}
|
||||
|
||||
virCommandFree(cmd);
|
||||
|
@ -842,11 +842,10 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
|
||||
if (virXMLCheckIllegalChars("name", vmdef->name, "\n") < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
|
||||
driver->xmlopt,
|
||||
0, NULL)))
|
||||
goto cleanup;
|
||||
vmdef = NULL;
|
||||
vm->persistent = 1;
|
||||
|
||||
if (openvzSetInitialConfig(vm->def) < 0) {
|
||||
@ -930,13 +929,13 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains,
|
||||
vmdef,
|
||||
&vmdef,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
vmdef = NULL;
|
||||
|
||||
/* All OpenVZ domains seem to be persistent - this is a bit of a violation
|
||||
* of this libvirt API which is intended for transient domain creation */
|
||||
vm->persistent = 1;
|
||||
@ -2094,13 +2093,12 @@ openvzDomainMigratePrepare3Params(virConnectPtr dconn,
|
||||
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
|
||||
goto error;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto error;
|
||||
def = NULL;
|
||||
|
||||
if (!uri_in) {
|
||||
if ((my_hostname = virGetHostname()) == NULL)
|
||||
|
@ -1726,13 +1726,12 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
|
||||
if (virDomainCreateXMLEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START,
|
||||
flags) < 0) {
|
||||
@ -5944,13 +5943,12 @@ qemuDomainRestoreFlags(virConnectPtr conn,
|
||||
def = tmp;
|
||||
}
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (flags & VIR_DOMAIN_SAVE_RUNNING)
|
||||
data->header.was_running = 1;
|
||||
@ -6231,8 +6229,7 @@ qemuDomainObjRestore(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
virDomainObjAssignDef(vm, def, true, NULL);
|
||||
def = NULL;
|
||||
virDomainObjAssignDef(vm, &def, true, NULL);
|
||||
|
||||
ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path,
|
||||
start_paused, asyncJob);
|
||||
@ -6601,11 +6598,10 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
|
||||
if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &def,
|
||||
driver->xmlopt,
|
||||
0, &oldDef)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (!oldDef && qemuDomainNamePathsCleanup(cfg, vm->def->name, false) < 0)
|
||||
goto cleanup;
|
||||
@ -7925,8 +7921,7 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObj *vm,
|
||||
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
|
||||
return -1;
|
||||
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -8062,10 +8057,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
||||
/* Finally, if no error until here, we can save config. */
|
||||
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
||||
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
|
||||
if (!ret) {
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
}
|
||||
if (!ret)
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
endjob:
|
||||
@ -8149,8 +8142,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *driver,
|
||||
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
|
||||
goto cleanup;
|
||||
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
@ -8219,8 +8211,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriver *driver,
|
||||
if (vmdef) {
|
||||
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
|
||||
return -1;
|
||||
virDomainObjAssignDef(vm, vmdef, false, NULL);
|
||||
vmdef = NULL;
|
||||
virDomainObjAssignDef(vm, &vmdef, false, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -9607,8 +9598,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
|
||||
if (rc < 0)
|
||||
goto endjob;
|
||||
|
||||
virDomainObjAssignDef(vm, persistentDefCopy, false, NULL);
|
||||
persistentDefCopy = NULL;
|
||||
virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
@ -2878,13 +2878,12 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
|
||||
QEMU_MIGRATION_COOKIE_BLOCK_DIRTY_BITMAPS)))
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, *def,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
*def = NULL;
|
||||
|
||||
priv = vm->privateData;
|
||||
jobPriv = priv->job.privateData;
|
||||
|
@ -1984,13 +1984,11 @@ qemuSnapshotRevert(virDomainObj *vm,
|
||||
}
|
||||
|
||||
if (inactiveConfig) {
|
||||
virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
|
||||
inactiveConfig = NULL;
|
||||
virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
|
||||
defined = true;
|
||||
}
|
||||
|
||||
virDomainObjAssignDef(vm, config, true, NULL);
|
||||
config = NULL;
|
||||
virDomainObjAssignDef(vm, &config, true, NULL);
|
||||
|
||||
/* No cookie means libvirt which saved the domain was too old to
|
||||
* mess up the CPU definitions.
|
||||
@ -2065,8 +2063,7 @@ qemuSnapshotRevert(virDomainObj *vm,
|
||||
}
|
||||
|
||||
if (inactiveConfig) {
|
||||
virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
|
||||
inactiveConfig = NULL;
|
||||
virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
|
||||
defined = true;
|
||||
}
|
||||
|
||||
|
@ -1043,7 +1043,7 @@ testParseDomains(testDriver *privconn,
|
||||
|
||||
if (testDomainGenerateIfnames(def) < 0 ||
|
||||
!(obj = virDomainObjListAdd(privconn->domains,
|
||||
def,
|
||||
&def,
|
||||
privconn->xmlopt,
|
||||
0, NULL))) {
|
||||
virDomainDefFree(def);
|
||||
@ -1053,7 +1053,7 @@ testParseDomains(testDriver *privconn,
|
||||
if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0)
|
||||
goto error;
|
||||
|
||||
nsdata = def->namespaceData;
|
||||
nsdata = obj->def->namespaceData;
|
||||
obj->persistent = !nsdata->transient;
|
||||
obj->hasManagedSave = nsdata->hasManagedSave;
|
||||
|
||||
@ -1768,13 +1768,12 @@ testDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
if (testDomainGenerateIfnames(def) < 0)
|
||||
goto cleanup;
|
||||
if (!(dom = virDomainObjListAdd(privconn->domains,
|
||||
def,
|
||||
&def,
|
||||
privconn->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_BOOTED) < 0) {
|
||||
if (!dom->persistent)
|
||||
@ -2517,13 +2516,12 @@ testDomainRestoreFlags(virConnectPtr conn,
|
||||
if (testDomainGenerateIfnames(def) < 0)
|
||||
goto cleanup;
|
||||
if (!(dom = virDomainObjListAdd(privconn->domains,
|
||||
def,
|
||||
&def,
|
||||
privconn->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
|
||||
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_RESTORED) < 0) {
|
||||
if (!dom->persistent)
|
||||
@ -4208,12 +4206,11 @@ static virDomainPtr testDomainDefineXMLFlags(virConnectPtr conn,
|
||||
if (testDomainGenerateIfnames(def) < 0)
|
||||
goto cleanup;
|
||||
if (!(dom = virDomainObjListAdd(privconn->domains,
|
||||
def,
|
||||
&def,
|
||||
privconn->xmlopt,
|
||||
0,
|
||||
&oldDef)))
|
||||
goto cleanup;
|
||||
def = NULL;
|
||||
dom->persistent = 1;
|
||||
|
||||
event = virDomainEventLifecycleNewFromObj(dom,
|
||||
@ -9065,7 +9062,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
virObjectEventStateQueue(privconn->eventState, event);
|
||||
}
|
||||
|
||||
virDomainObjAssignDef(vm, config, false, NULL);
|
||||
virDomainObjAssignDef(vm, &config, false, NULL);
|
||||
if (testDomainStartState(privconn, vm,
|
||||
VIR_DOMAIN_RUNNING_FROM_SNAPSHOT) < 0)
|
||||
goto cleanup;
|
||||
@ -9086,7 +9083,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
}
|
||||
} else {
|
||||
/* Transitions 1, 4, 7 */
|
||||
virDomainObjAssignDef(vm, config, false, NULL);
|
||||
virDomainObjAssignDef(vm, &config, false, NULL);
|
||||
|
||||
if (virDomainObjIsActive(vm)) {
|
||||
/* Transitions 4, 7 */
|
||||
|
@ -156,7 +156,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
|
||||
driver->xmlopt,
|
||||
0, NULL)))
|
||||
goto cleanup;
|
||||
@ -165,7 +165,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
|
||||
|
||||
pDomain->vmxPath = g_strdup(vmxPath);
|
||||
|
||||
vmwareDomainConfigDisplay(pDomain, vmdef);
|
||||
vmwareDomainConfigDisplay(pDomain, vm->def);
|
||||
|
||||
if ((vm->def->id = vmwareExtractPid(vmxPath)) < 0)
|
||||
goto cleanup;
|
||||
@ -175,8 +175,6 @@ vmwareLoadDomains(struct vmware_driver *driver)
|
||||
vm->persistent = 1;
|
||||
|
||||
virDomainObjEndAPI(&vm);
|
||||
|
||||
vmdef = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
@ -438,7 +438,7 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
|
||||
|
||||
/* assign def */
|
||||
if (!(vm = virDomainObjListAdd(driver->domains,
|
||||
vmdef,
|
||||
&vmdef,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
NULL)))
|
||||
@ -447,9 +447,8 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
|
||||
pDomain = vm->privateData;
|
||||
pDomain->vmxPath = g_strdup(vmxPath);
|
||||
|
||||
vmwareDomainConfigDisplay(pDomain, vmdef);
|
||||
vmwareDomainConfigDisplay(pDomain, vm->def);
|
||||
|
||||
vmdef = NULL;
|
||||
vm->persistent = 1;
|
||||
|
||||
dom = virGetDomain(conn, vm->def->name, vm->def->uuid, -1);
|
||||
@ -689,7 +688,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
|
||||
/* assign def */
|
||||
if (!(vm = virDomainObjListAdd(driver->domains,
|
||||
vmdef,
|
||||
&vmdef,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
|
||||
@ -699,8 +698,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
pDomain = vm->privateData;
|
||||
pDomain->vmxPath = g_strdup(vmxPath);
|
||||
|
||||
vmwareDomainConfigDisplay(pDomain, vmdef);
|
||||
vmdef = NULL;
|
||||
vmwareDomainConfigDisplay(pDomain, vm->def);
|
||||
|
||||
if (vmwareStartVM(driver, vm) < 0) {
|
||||
if (!vm->persistent)
|
||||
|
Loading…
x
Reference in New Issue
Block a user