f1056279 removed virDomainSnapshotDef.current and leaved
using vm->current_snapshot only. Later 4819f54bd moved current snapshot
tracking to virDomainSnapshotObjList. As vz driver never used
vm->current_snaphot this patch includes fixes after both commits.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
---
src/vz/vz_driver.c | 31 ++++---------------------------
src/vz/vz_sdk.c | 14 ++++++--------
2 files changed, 10 insertions(+), 35 deletions(-)
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 40d3a73..f7a44d4 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -2152,29 +2152,6 @@ vzSnapObjFromSnapshot(virDomainSnapshotObjListPtr snapshots,
}
static int
-vzCurrentSnapshotIterator(void *payload,
- const void *name ATTRIBUTE_UNUSED,
- void *data)
-{
- virDomainMomentObjPtr snapshot = payload;
- virDomainMomentObjPtr *current = data;
-
- if (snapshot->def->current)
- *current = snapshot;
-
- return 0;
-}
-
-static virDomainMomentObjPtr
-vzFindCurrentSnapshot(virDomainSnapshotObjListPtr snapshots)
-{
- virDomainMomentObjPtr current = NULL;
-
- virDomainSnapshotForEach(snapshots, vzCurrentSnapshotIterator, ¤t);
- return current;
-}
-
-static int
vzDomainSnapshotNum(virDomainPtr domain, unsigned int flags)
{
virDomainObjPtr dom;
@@ -2452,7 +2429,7 @@ vzDomainHasCurrentSnapshot(virDomainPtr domain, unsigned int flags)
if (!(snapshots = prlsdkLoadSnapshots(dom)))
goto cleanup;
- ret = vzFindCurrentSnapshot(snapshots) != NULL;
+ ret = virDomainSnapshotGetCurrent(snapshots) != NULL;
cleanup:
virDomainSnapshotObjListFree(snapshots);
@@ -2518,7 +2495,7 @@ vzDomainSnapshotCurrent(virDomainPtr domain, unsigned int flags)
if (!(snapshots = prlsdkLoadSnapshots(dom)))
goto cleanup;
- if (!(current = vzFindCurrentSnapshot(snapshots))) {
+ if (!(current = virDomainSnapshotGetCurrent(snapshots))) {
virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, "%s",
_("the domain does not have a current snapshot"));
goto cleanup;
@@ -2552,7 +2529,7 @@ vzDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, unsigned
int flags)
if (!(snapshots = prlsdkLoadSnapshots(dom)))
goto cleanup;
- current = vzFindCurrentSnapshot(snapshots);
+ current = virDomainSnapshotGetCurrent(snapshots);
ret = current && STREQ(snapshot->name, current->def->name);
cleanup:
@@ -2648,7 +2625,7 @@ vzDomainSnapshotCreateXML(virDomainPtr domain,
if (!(snapshots = prlsdkLoadSnapshots(dom)))
goto cleanup;
- if (!(current = vzFindCurrentSnapshot(snapshots))) {
+ if (!(current = virDomainSnapshotGetCurrent(snapshots))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("can't find created snapshot"));
goto cleanup;
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index f5a5911..92bcb3d 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -4656,7 +4656,6 @@ prlsdkParseSnapshotTree(const char *treexml)
xmlNodePtr *nodes = NULL;
virDomainSnapshotDefPtr def = NULL;
virDomainMomentObjPtr snapshot;
- virDomainMomentObjPtr current = NULL;
virDomainSnapshotObjListPtr snapshots = NULL;
char *xmlstr = NULL;
int n;
@@ -4743,22 +4742,21 @@ prlsdkParseSnapshotTree(const char *treexml)
}
VIR_FREE(xmlstr);
- xmlstr = virXPathString("string(./@current)", ctxt);
- def->current = xmlstr && STREQ("yes", xmlstr);
- VIR_FREE(xmlstr);
-
if (!(snapshot = virDomainSnapshotAssignDef(snapshots, def)))
goto cleanup;
def = NULL;
- if (snapshot->def->current) {
- if (current) {
+ xmlstr = virXPathString("string(./@current)", ctxt);
+ if (xmlstr && STREQ("yes", xmlstr)) {
+ if (virDomainSnapshotGetCurrent(snapshots)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("too many current snapshots"));
+ VIR_FREE(xmlstr);
goto cleanup;
}
- current = snapshot;
+ virDomainSnapshotSetCurrent(snapshots, snapshot);
}
+ VIR_FREE(xmlstr);
}
if (virDomainSnapshotUpdateRelations(snapshots) < 0) {
--
1.8.3.1