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:
Michal Privoznik 2021-11-02 12:19:50 +01:00
parent 900fb1a315
commit 6bcd263011
18 changed files with 76 additions and 122 deletions

View File

@ -533,11 +533,10 @@ bhyveDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
if (bhyveDomainAssignAddresses(def, NULL) < 0) if (bhyveDomainAssignAddresses(def, NULL) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(privconn->domains, def, if (!(vm = virDomainObjListAdd(privconn->domains, &def,
privconn->xmlopt, privconn->xmlopt,
0, &oldDef))) 0, &oldDef)))
goto cleanup; goto cleanup;
def = NULL;
vm->persistent = 1; vm->persistent = 1;
if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def, if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
@ -915,12 +914,11 @@ bhyveDomainCreateXML(virConnectPtr conn,
if (bhyveDomainAssignAddresses(def, NULL) < 0) if (bhyveDomainAssignAddresses(def, NULL) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(privconn->domains, def, if (!(vm = virDomainObjListAdd(privconn->domains, &def,
privconn->xmlopt, privconn->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL))) VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (virBhyveProcessStart(conn, vm, if (virBhyveProcessStart(conn, vm,
VIR_DOMAIN_RUNNING_BOOTED, VIR_DOMAIN_RUNNING_BOOTED,

View File

@ -237,15 +237,13 @@ chDomainCreateXML(virConnectPtr conn,
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, if (!(vm = virDomainObjListAdd(driver->domains,
vmdef, &vmdef,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
vmdef = NULL;
if (virCHDomainObjBeginJob(vm, CH_JOB_MODIFY) < 0) if (virCHDomainObjBeginJob(vm, CH_JOB_MODIFY) < 0)
goto cleanup; goto cleanup;
@ -323,12 +321,11 @@ chDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
if (virDomainDefineXMLFlagsEnsureACL(conn, vmdef) < 0) if (virDomainDefineXMLFlagsEnsureACL(conn, vmdef) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, vmdef, if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
driver->xmlopt, driver->xmlopt,
0, NULL))) 0, NULL)))
goto cleanup; goto cleanup;
vmdef = NULL;
vm->persistent = 1; vm->persistent = 1;
dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id); dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id);

View File

@ -3865,7 +3865,7 @@ virDomainDefNew(virDomainXMLOption *xmlopt)
void virDomainObjAssignDef(virDomainObj *domain, void virDomainObjAssignDef(virDomainObj *domain,
virDomainDef *def, virDomainDef **def,
bool live, bool live,
virDomainDef **oldDef) virDomainDef **oldDef)
{ {
@ -3876,7 +3876,7 @@ void virDomainObjAssignDef(virDomainObj *domain,
*oldDef = domain->newDef; *oldDef = domain->newDef;
else else
virDomainDefFree(domain->newDef); virDomainDefFree(domain->newDef);
domain->newDef = def; domain->newDef = g_steal_pointer(def);
} else { } else {
if (live) { if (live) {
/* save current configuration to be restored on domain shutdown */ /* save current configuration to be restored on domain shutdown */
@ -3884,13 +3884,13 @@ void virDomainObjAssignDef(virDomainObj *domain,
domain->newDef = domain->def; domain->newDef = domain->def;
else else
virDomainDefFree(domain->def); virDomainDefFree(domain->def);
domain->def = def; domain->def = g_steal_pointer(def);
} else { } else {
if (oldDef) if (oldDef)
*oldDef = domain->def; *oldDef = domain->def;
else else
virDomainDefFree(domain->def); virDomainDefFree(domain->def);
domain->def = def; domain->def = g_steal_pointer(def);
} }
} }
} }

View File

@ -3388,7 +3388,7 @@ virDomainNetDefNew(virDomainXMLOption *xmlopt);
virDomainDef *virDomainDefNew(virDomainXMLOption *xmlopt); virDomainDef *virDomainDefNew(virDomainXMLOption *xmlopt);
void virDomainObjAssignDef(virDomainObj *domain, void virDomainObjAssignDef(virDomainObj *domain,
virDomainDef *def, virDomainDef **def,
bool live, bool live,
virDomainDef **oldDef); virDomainDef **oldDef);
int virDomainObjSetDefTransient(virDomainXMLOption *xmlopt, int virDomainObjSetDefTransient(virDomainXMLOption *xmlopt,

View File

@ -257,13 +257,17 @@ virDomainObjListAddObjLocked(virDomainObjList *doms,
* the @def being added is assumed to represent a * the @def being added is assumed to represent a
* live config, not a future inactive config * 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 * The returned @vm from this function will be locked and ref
* counted. The caller is expected to use virDomainObjEndAPI * counted. The caller is expected to use virDomainObjEndAPI
* when it completes usage. * when it completes usage.
*/ */
static virDomainObj * static virDomainObj *
virDomainObjListAddLocked(virDomainObjList *doms, virDomainObjListAddLocked(virDomainObjList *doms,
virDomainDef *def, virDomainDef **def,
virDomainXMLOption *xmlopt, virDomainXMLOption *xmlopt,
unsigned int flags, unsigned int flags,
virDomainDef **oldDef) virDomainDef **oldDef)
@ -275,13 +279,13 @@ virDomainObjListAddLocked(virDomainObjList *doms,
*oldDef = NULL; *oldDef = NULL;
/* See if a VM with matching UUID already exists */ /* See if a VM with matching UUID already exists */
if ((vm = virDomainObjListFindByUUIDLocked(doms, def->uuid))) { if ((vm = virDomainObjListFindByUUIDLocked(doms, (*def)->uuid))) {
if (vm->removing) { if (vm->removing) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
_("domain '%s' is already being removed"), _("domain '%s' is already being removed"),
vm->def->name); vm->def->name);
goto error; 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 */ /* UUID matches, but if names don't match, refuse it */
virUUIDFormat(vm->def->uuid, uuidstr); virUUIDFormat(vm->def->uuid, uuidstr);
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
@ -312,20 +316,20 @@ virDomainObjListAddLocked(virDomainObjList *doms,
oldDef); oldDef);
} else { } else {
/* UUID does not match, but if a name matches, refuse it */ /* 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); virUUIDFormat(vm->def->uuid, uuidstr);
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
_("domain '%s' already exists with uuid %s"), _("domain '%s' already exists with uuid %s"),
def->name, uuidstr); (*def)->name, uuidstr);
goto error; goto error;
} }
if (!(vm = virDomainObjNew(xmlopt))) if (!(vm = virDomainObjNew(xmlopt)))
goto error; goto error;
vm->def = def; vm->def = g_steal_pointer(def);
if (virDomainObjListAddObjLocked(doms, vm) < 0) { if (virDomainObjListAddObjLocked(doms, vm) < 0) {
vm->def = NULL; *def = g_steal_pointer(&vm->def);
goto error; goto error;
} }
} }
@ -340,7 +344,7 @@ virDomainObjListAddLocked(virDomainObjList *doms,
virDomainObj * virDomainObj *
virDomainObjListAdd(virDomainObjList *doms, virDomainObjListAdd(virDomainObjList *doms,
virDomainDef *def, virDomainDef **def,
virDomainXMLOption *xmlopt, virDomainXMLOption *xmlopt,
unsigned int flags, unsigned int flags,
virDomainDef **oldDef) virDomainDef **oldDef)
@ -498,7 +502,7 @@ virDomainObjListLoadConfig(virDomainObjList *doms,
if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0) if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
goto error; goto error;
if (!(dom = virDomainObjListAddLocked(doms, def, xmlopt, 0, &oldDef))) if (!(dom = virDomainObjListAddLocked(doms, &def, xmlopt, 0, &oldDef)))
goto error; goto error;
dom->autostart = autostart; dom->autostart = autostart;

View File

@ -40,7 +40,7 @@ enum {
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1), VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
}; };
virDomainObj *virDomainObjListAdd(virDomainObjList *doms, virDomainObj *virDomainObjListAdd(virDomainObjList *doms,
virDomainDef *def, virDomainDef **def,
virDomainXMLOption *xmlopt, virDomainXMLOption *xmlopt,
unsigned int flags, unsigned int flags,
virDomainDef **oldDef); virDomainDef **oldDef);

View File

@ -1482,8 +1482,7 @@ libxlDomainStartNew(libxlDriverPrivate *driver,
goto cleanup; goto cleanup;
} }
virDomainObjAssignDef(vm, def, true, NULL); virDomainObjAssignDef(vm, &def, true, NULL);
def = NULL;
if (unlink(managed_save_path) < 0) if (unlink(managed_save_path) < 0)
VIR_WARN("Failed to remove the managed state %s", VIR_WARN("Failed to remove the managed state %s",

View File

@ -595,13 +595,12 @@ libxlAddDom0(libxlDriverPrivate *driver)
if (virUUIDParse("00000000-0000-0000-0000-000000000000", def->uuid) < 0) if (virUUIDParse("00000000-0000-0000-0000-000000000000", def->uuid) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
0, 0,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
vm->persistent = 1; vm->persistent = 1;
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED); virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED);
} }
@ -1028,13 +1027,12 @@ libxlDomainCreateXML(virConnectPtr conn, const char *xml,
if (virDomainCreateXMLEnsureACL(conn, def) < 0) if (virDomainCreateXMLEnsureACL(conn, def) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) { if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
if (!vm->persistent) if (!vm->persistent)
@ -1948,13 +1946,12 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
if (virDomainRestoreFlagsEnsureACL(conn, def) < 0) if (virDomainRestoreFlagsEnsureACL(conn, def) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) { if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
if (!vm->persistent) if (!vm->persistent)
@ -2826,12 +2823,11 @@ libxlDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0) if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
0, 0,
&oldDef))) &oldDef)))
goto cleanup; goto cleanup;
def = NULL;
vm->persistent = 1; vm->persistent = 1;
@ -4143,10 +4139,8 @@ libxlDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
endjob: endjob:
@ -4234,10 +4228,8 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
endjob: endjob:
@ -4319,10 +4311,8 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG)) { if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG)) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
cleanup: cleanup:

View File

@ -548,13 +548,12 @@ libxlDomainMigrationDstPrepareTunnel3(virConnectPtr dconn,
&mig, &xmlout, &taint_hook) < 0) &mig, &xmlout, &taint_hook) < 0)
goto error; goto error;
if (!(vm = virDomainObjListAdd(driver->domains, *def, if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto error; goto error;
*def = NULL;
/* /*
* Unless an error is encountered in this function, the job will * Unless an error is encountered in this function, the job will
@ -658,13 +657,12 @@ libxlDomainMigrationDstPrepare(virConnectPtr dconn,
&mig, &xmlout, &taint_hook) < 0) &mig, &xmlout, &taint_hook) < 0)
goto error; goto error;
if (!(vm = virDomainObjListAdd(driver->domains, *def, if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto error; goto error;
*def = NULL;
/* /*
* Unless an error is encountered in this function, the job will * Unless an error is encountered in this function, the job will

View File

@ -435,12 +435,11 @@ lxcDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
goto cleanup; goto cleanup;
} }
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
0, &oldDef))) 0, &oldDef)))
goto cleanup; goto cleanup;
def = NULL;
vm->persistent = 1; vm->persistent = 1;
if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def, 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, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) { if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) {
if (!vm->persistent) if (!vm->persistent)
@ -1917,8 +1915,7 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (rc < 0) if (rc < 0)
goto endjob; goto endjob;
virDomainObjAssignDef(vm, persistentDefCopy, false, NULL); virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
persistentDefCopy = NULL;
} }
ret = 0; ret = 0;
@ -4368,10 +4365,8 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr dom,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) { if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
endjob: endjob:
@ -4444,8 +4439,7 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr dom,
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0) if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
goto endjob; goto endjob;
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
ret = 0; ret = 0;
endjob: endjob:
@ -4537,10 +4531,8 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr dom,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) { if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
endjob: endjob:

View File

@ -527,7 +527,7 @@ int openvzLoadDomains(struct openvz_driver *driver)
flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE; flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE;
if (!(dom = virDomainObjListAdd(driver->domains, if (!(dom = virDomainObjListAdd(driver->domains,
def, &def,
driver->xmlopt, driver->xmlopt,
flags, flags,
NULL))) NULL)))
@ -547,7 +547,6 @@ int openvzLoadDomains(struct openvz_driver *driver)
virDomainObjEndAPI(&dom); virDomainObjEndAPI(&dom);
dom = NULL; dom = NULL;
def = NULL;
} }
virCommandFree(cmd); virCommandFree(cmd);

View File

@ -842,11 +842,10 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
if (virXMLCheckIllegalChars("name", vmdef->name, "\n") < 0) if (virXMLCheckIllegalChars("name", vmdef->name, "\n") < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, vmdef, if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
driver->xmlopt, driver->xmlopt,
0, NULL))) 0, NULL)))
goto cleanup; goto cleanup;
vmdef = NULL;
vm->persistent = 1; vm->persistent = 1;
if (openvzSetInitialConfig(vm->def) < 0) { if (openvzSetInitialConfig(vm->def) < 0) {
@ -930,13 +929,13 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, if (!(vm = virDomainObjListAdd(driver->domains,
vmdef, &vmdef,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
vmdef = NULL;
/* All OpenVZ domains seem to be persistent - this is a bit of a violation /* 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 */ * of this libvirt API which is intended for transient domain creation */
vm->persistent = 1; vm->persistent = 1;
@ -2094,13 +2093,12 @@ openvzDomainMigratePrepare3Params(virConnectPtr dconn,
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
goto error; goto error;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto error; goto error;
def = NULL;
if (!uri_in) { if (!uri_in) {
if ((my_hostname = virGetHostname()) == NULL) if ((my_hostname = virGetHostname()) == NULL)

View File

@ -1726,13 +1726,12 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
if (virDomainCreateXMLEnsureACL(conn, def) < 0) if (virDomainCreateXMLEnsureACL(conn, def) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START, if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START,
flags) < 0) { flags) < 0) {
@ -5944,13 +5943,12 @@ qemuDomainRestoreFlags(virConnectPtr conn,
def = tmp; def = tmp;
} }
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (flags & VIR_DOMAIN_SAVE_RUNNING) if (flags & VIR_DOMAIN_SAVE_RUNNING)
data->header.was_running = 1; data->header.was_running = 1;
@ -6231,8 +6229,7 @@ qemuDomainObjRestore(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
virDomainObjAssignDef(vm, def, true, NULL); virDomainObjAssignDef(vm, &def, true, NULL);
def = NULL;
ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path, ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path,
start_paused, asyncJob); start_paused, asyncJob);
@ -6601,11 +6598,10 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0) if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, def, if (!(vm = virDomainObjListAdd(driver->domains, &def,
driver->xmlopt, driver->xmlopt,
0, &oldDef))) 0, &oldDef)))
goto cleanup; goto cleanup;
def = NULL;
if (!oldDef && qemuDomainNamePathsCleanup(cfg, vm->def->name, false) < 0) if (!oldDef && qemuDomainNamePathsCleanup(cfg, vm->def->name, false) < 0)
goto cleanup; goto cleanup;
@ -7925,8 +7921,7 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObj *vm,
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0) if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
return -1; return -1;
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
} }
return 0; return 0;
@ -8062,10 +8057,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
/* Finally, if no error until here, we can save config. */ /* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) { if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir); ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
if (!ret) { if (!ret)
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
}
} }
endjob: endjob:
@ -8149,8 +8142,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *driver,
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0) if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
goto cleanup; goto cleanup;
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
} }
ret = 0; ret = 0;
@ -8219,8 +8211,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriver *driver,
if (vmdef) { if (vmdef) {
if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0) if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
return -1; return -1;
virDomainObjAssignDef(vm, vmdef, false, NULL); virDomainObjAssignDef(vm, &vmdef, false, NULL);
vmdef = NULL;
} }
return 0; return 0;
@ -9607,8 +9598,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (rc < 0) if (rc < 0)
goto endjob; goto endjob;
virDomainObjAssignDef(vm, persistentDefCopy, false, NULL); virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
persistentDefCopy = NULL;
} }
ret = 0; ret = 0;

View File

@ -2878,13 +2878,12 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
QEMU_MIGRATION_COOKIE_BLOCK_DIRTY_BITMAPS))) QEMU_MIGRATION_COOKIE_BLOCK_DIRTY_BITMAPS)))
goto cleanup; goto cleanup;
if (!(vm = virDomainObjListAdd(driver->domains, *def, if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
*def = NULL;
priv = vm->privateData; priv = vm->privateData;
jobPriv = priv->job.privateData; jobPriv = priv->job.privateData;

View File

@ -1984,13 +1984,11 @@ qemuSnapshotRevert(virDomainObj *vm,
} }
if (inactiveConfig) { if (inactiveConfig) {
virDomainObjAssignDef(vm, inactiveConfig, false, NULL); virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
inactiveConfig = NULL;
defined = true; defined = true;
} }
virDomainObjAssignDef(vm, config, true, NULL); virDomainObjAssignDef(vm, &config, true, NULL);
config = NULL;
/* No cookie means libvirt which saved the domain was too old to /* No cookie means libvirt which saved the domain was too old to
* mess up the CPU definitions. * mess up the CPU definitions.
@ -2065,8 +2063,7 @@ qemuSnapshotRevert(virDomainObj *vm,
} }
if (inactiveConfig) { if (inactiveConfig) {
virDomainObjAssignDef(vm, inactiveConfig, false, NULL); virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
inactiveConfig = NULL;
defined = true; defined = true;
} }

View File

@ -1043,7 +1043,7 @@ testParseDomains(testDriver *privconn,
if (testDomainGenerateIfnames(def) < 0 || if (testDomainGenerateIfnames(def) < 0 ||
!(obj = virDomainObjListAdd(privconn->domains, !(obj = virDomainObjListAdd(privconn->domains,
def, &def,
privconn->xmlopt, privconn->xmlopt,
0, NULL))) { 0, NULL))) {
virDomainDefFree(def); virDomainDefFree(def);
@ -1053,7 +1053,7 @@ testParseDomains(testDriver *privconn,
if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0) if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0)
goto error; goto error;
nsdata = def->namespaceData; nsdata = obj->def->namespaceData;
obj->persistent = !nsdata->transient; obj->persistent = !nsdata->transient;
obj->hasManagedSave = nsdata->hasManagedSave; obj->hasManagedSave = nsdata->hasManagedSave;
@ -1768,13 +1768,12 @@ testDomainCreateXML(virConnectPtr conn, const char *xml,
if (testDomainGenerateIfnames(def) < 0) if (testDomainGenerateIfnames(def) < 0)
goto cleanup; goto cleanup;
if (!(dom = virDomainObjListAdd(privconn->domains, if (!(dom = virDomainObjListAdd(privconn->domains,
def, &def,
privconn->xmlopt, privconn->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_BOOTED) < 0) { if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_BOOTED) < 0) {
if (!dom->persistent) if (!dom->persistent)
@ -2517,13 +2516,12 @@ testDomainRestoreFlags(virConnectPtr conn,
if (testDomainGenerateIfnames(def) < 0) if (testDomainGenerateIfnames(def) < 0)
goto cleanup; goto cleanup;
if (!(dom = virDomainObjListAdd(privconn->domains, if (!(dom = virDomainObjListAdd(privconn->domains,
def, &def,
privconn->xmlopt, privconn->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
goto cleanup; goto cleanup;
def = NULL;
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_RESTORED) < 0) { if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_RESTORED) < 0) {
if (!dom->persistent) if (!dom->persistent)
@ -4208,12 +4206,11 @@ static virDomainPtr testDomainDefineXMLFlags(virConnectPtr conn,
if (testDomainGenerateIfnames(def) < 0) if (testDomainGenerateIfnames(def) < 0)
goto cleanup; goto cleanup;
if (!(dom = virDomainObjListAdd(privconn->domains, if (!(dom = virDomainObjListAdd(privconn->domains,
def, &def,
privconn->xmlopt, privconn->xmlopt,
0, 0,
&oldDef))) &oldDef)))
goto cleanup; goto cleanup;
def = NULL;
dom->persistent = 1; dom->persistent = 1;
event = virDomainEventLifecycleNewFromObj(dom, event = virDomainEventLifecycleNewFromObj(dom,
@ -9065,7 +9062,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
virObjectEventStateQueue(privconn->eventState, event); virObjectEventStateQueue(privconn->eventState, event);
} }
virDomainObjAssignDef(vm, config, false, NULL); virDomainObjAssignDef(vm, &config, false, NULL);
if (testDomainStartState(privconn, vm, if (testDomainStartState(privconn, vm,
VIR_DOMAIN_RUNNING_FROM_SNAPSHOT) < 0) VIR_DOMAIN_RUNNING_FROM_SNAPSHOT) < 0)
goto cleanup; goto cleanup;
@ -9086,7 +9083,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
} }
} else { } else {
/* Transitions 1, 4, 7 */ /* Transitions 1, 4, 7 */
virDomainObjAssignDef(vm, config, false, NULL); virDomainObjAssignDef(vm, &config, false, NULL);
if (virDomainObjIsActive(vm)) { if (virDomainObjIsActive(vm)) {
/* Transitions 4, 7 */ /* Transitions 4, 7 */

View File

@ -156,7 +156,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
goto cleanup; goto cleanup;
} }
if (!(vm = virDomainObjListAdd(driver->domains, vmdef, if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
driver->xmlopt, driver->xmlopt,
0, NULL))) 0, NULL)))
goto cleanup; goto cleanup;
@ -165,7 +165,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
pDomain->vmxPath = g_strdup(vmxPath); pDomain->vmxPath = g_strdup(vmxPath);
vmwareDomainConfigDisplay(pDomain, vmdef); vmwareDomainConfigDisplay(pDomain, vm->def);
if ((vm->def->id = vmwareExtractPid(vmxPath)) < 0) if ((vm->def->id = vmwareExtractPid(vmxPath)) < 0)
goto cleanup; goto cleanup;
@ -175,8 +175,6 @@ vmwareLoadDomains(struct vmware_driver *driver)
vm->persistent = 1; vm->persistent = 1;
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
vmdef = NULL;
} }
ret = 0; ret = 0;

View File

@ -438,7 +438,7 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
/* assign def */ /* assign def */
if (!(vm = virDomainObjListAdd(driver->domains, if (!(vm = virDomainObjListAdd(driver->domains,
vmdef, &vmdef,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL))) NULL)))
@ -447,9 +447,8 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
pDomain = vm->privateData; pDomain = vm->privateData;
pDomain->vmxPath = g_strdup(vmxPath); pDomain->vmxPath = g_strdup(vmxPath);
vmwareDomainConfigDisplay(pDomain, vmdef); vmwareDomainConfigDisplay(pDomain, vm->def);
vmdef = NULL;
vm->persistent = 1; vm->persistent = 1;
dom = virGetDomain(conn, vm->def->name, vm->def->uuid, -1); dom = virGetDomain(conn, vm->def->name, vm->def->uuid, -1);
@ -689,7 +688,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
/* assign def */ /* assign def */
if (!(vm = virDomainObjListAdd(driver->domains, if (!(vm = virDomainObjListAdd(driver->domains,
vmdef, &vmdef,
driver->xmlopt, driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE | VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@ -699,8 +698,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
pDomain = vm->privateData; pDomain = vm->privateData;
pDomain->vmxPath = g_strdup(vmxPath); pDomain->vmxPath = g_strdup(vmxPath);
vmwareDomainConfigDisplay(pDomain, vmdef); vmwareDomainConfigDisplay(pDomain, vm->def);
vmdef = NULL;
if (vmwareStartVM(driver, vm) < 0) { if (vmwareStartVM(driver, vm) < 0) {
if (!vm->persistent) if (!vm->persistent)