mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
virDomainSnapshotAssignDef: Clear second argument when it is consumed
Rather than callers second-guessing when the snapshot definition is assigned turn it into a double pointer and clear it on success. Fix callers to work with the new semantics. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
91df85e057
commit
d281c1323f
@ -42,9 +42,15 @@ struct _virDomainSnapshotObjList {
|
|||||||
|
|
||||||
virDomainMomentObj *
|
virDomainMomentObj *
|
||||||
virDomainSnapshotAssignDef(virDomainSnapshotObjList *snapshots,
|
virDomainSnapshotAssignDef(virDomainSnapshotObjList *snapshots,
|
||||||
virDomainSnapshotDef *def)
|
virDomainSnapshotDef **snapdefptr)
|
||||||
{
|
{
|
||||||
return virDomainMomentAssignDef(snapshots->base, &def->parent);
|
virDomainSnapshotDef *snapdef = *snapdefptr;
|
||||||
|
virDomainMomentObj *ret = virDomainMomentAssignDef(snapshots->base, &snapdef->parent);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
*snapdefptr = NULL;
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ virDomainSnapshotObjList *virDomainSnapshotObjListNew(void);
|
|||||||
void virDomainSnapshotObjListFree(virDomainSnapshotObjList *snapshots);
|
void virDomainSnapshotObjListFree(virDomainSnapshotObjList *snapshots);
|
||||||
|
|
||||||
virDomainMomentObj *virDomainSnapshotAssignDef(virDomainSnapshotObjList *snapshots,
|
virDomainMomentObj *virDomainSnapshotAssignDef(virDomainSnapshotObjList *snapshots,
|
||||||
virDomainSnapshotDef *def);
|
virDomainSnapshotDef **snapdefptr);
|
||||||
|
|
||||||
int virDomainSnapshotObjListGetNames(virDomainSnapshotObjList *snapshots,
|
int virDomainSnapshotObjListGetNames(virDomainSnapshotObjList *snapshots,
|
||||||
virDomainMomentObj *from,
|
virDomainMomentObj *from,
|
||||||
|
@ -396,9 +396,7 @@ qemuDomainSnapshotLoad(virDomainObj *vm,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef);
|
snap = virDomainSnapshotAssignDef(vm->snapshots, &snapdef);
|
||||||
if (snap)
|
|
||||||
snapdef = NULL;
|
|
||||||
if (cur && snap) {
|
if (cur && snap) {
|
||||||
if (current)
|
if (current)
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
@ -1721,9 +1721,8 @@ qemuSnapshotRedefine(virDomainObj *vm,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!snap) {
|
if (!snap) {
|
||||||
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef)))
|
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, &snapdef)))
|
||||||
return NULL;
|
return NULL;
|
||||||
snapdef = NULL;
|
|
||||||
}
|
}
|
||||||
/* XXX Should we validate that the redefined snapshot even
|
/* XXX Should we validate that the redefined snapshot even
|
||||||
* makes sense, such as checking that qemu-img recognizes the
|
* makes sense, such as checking that qemu-img recognizes the
|
||||||
@ -1772,9 +1771,8 @@ qemuSnapshotCreate(virDomainObj *vm,
|
|||||||
snap->def = &snapdef->parent;
|
snap->def = &snapdef->parent;
|
||||||
snapdef = NULL;
|
snapdef = NULL;
|
||||||
} else {
|
} else {
|
||||||
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef)))
|
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, &snapdef)))
|
||||||
return NULL;
|
return NULL;
|
||||||
snapdef = NULL;
|
|
||||||
|
|
||||||
if ((current = virDomainSnapshotGetCurrent(vm->snapshots))) {
|
if ((current = virDomainSnapshotGetCurrent(vm->snapshots))) {
|
||||||
snap->def->parent_name = g_strdup(current->def->name);
|
snap->def->parent_name = g_strdup(current->def->name);
|
||||||
|
@ -968,7 +968,7 @@ testParseDomainSnapshots(testDriver *privconn,
|
|||||||
|
|
||||||
for (i = 0; i < nsdata->num_snap_nodes; i++) {
|
for (i = 0; i < nsdata->num_snap_nodes; i++) {
|
||||||
virDomainMomentObj *snap;
|
virDomainMomentObj *snap;
|
||||||
virDomainSnapshotDef *def;
|
g_autoptr(virDomainSnapshotDef) def = NULL;
|
||||||
xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file,
|
xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file,
|
||||||
"domainsnapshot");
|
"domainsnapshot");
|
||||||
if (!node)
|
if (!node)
|
||||||
@ -984,10 +984,8 @@ testParseDomainSnapshots(testDriver *privconn,
|
|||||||
if (!def)
|
if (!def)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!(snap = virDomainSnapshotAssignDef(domobj->snapshots, def))) {
|
if (!(snap = virDomainSnapshotAssignDef(domobj->snapshots, &def)))
|
||||||
virObjectUnref(def);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
if (cur) {
|
if (cur) {
|
||||||
if (virDomainSnapshotGetCurrent(domobj->snapshots)) {
|
if (virDomainSnapshotGetCurrent(domobj->snapshots)) {
|
||||||
@ -8755,9 +8753,8 @@ testDomainSnapshotRedefine(virDomainObj *vm,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!snap) {
|
if (!snap) {
|
||||||
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef)))
|
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, &snapdef)))
|
||||||
return NULL;
|
return NULL;
|
||||||
snapdef = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*snapout = snap;
|
*snapout = snap;
|
||||||
@ -8846,9 +8843,8 @@ testDomainSnapshotCreateXML(virDomainPtr domain,
|
|||||||
if (testDomainSnapshotAlignDisks(vm, def, flags) < 0)
|
if (testDomainSnapshotAlignDisks(vm, def, flags) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, def)))
|
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, &def)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
def = NULL;
|
|
||||||
|
|
||||||
snap->def->parent_name = g_strdup(virDomainSnapshotGetCurrentName(vm->snapshots));
|
snap->def->parent_name = g_strdup(virDomainSnapshotGetCurrentName(vm->snapshots));
|
||||||
|
|
||||||
|
@ -4661,9 +4661,8 @@ prlsdkParseSnapshotTree(const char *treexml)
|
|||||||
}
|
}
|
||||||
VIR_FREE(xmlstr);
|
VIR_FREE(xmlstr);
|
||||||
|
|
||||||
if (!(snapshot = virDomainSnapshotAssignDef(snapshots, def)))
|
if (!(snapshot = virDomainSnapshotAssignDef(snapshots, &def)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
def = NULL;
|
|
||||||
|
|
||||||
xmlstr = virXPathString("string(./@current)", ctxt);
|
xmlstr = virXPathString("string(./@current)", ctxt);
|
||||||
if (xmlstr && STREQ("yes", xmlstr)) {
|
if (xmlstr && STREQ("yes", xmlstr)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user